#announcements

generated UTC: 2023-02-13 19:08
latest data: https://clojurians-log.clojureverse.org/announcements/2023-02-12
messages: 11232
pro tips:
* Double click on text to filter by it. (doubleclick + cmd-f for extra points).
* Click on date to keep day visible regardless of filter.
* Click on time to keep hour visible regardless of filter.
#2015-06-2316:33aengelberg[ANN] Instaparse 1.4.1 https://github.com/Engelberg/instaparse/blob/master/CHANGES.md#141#2015-06-2920:06mfikes[ANN] Replete 1.0 beta: ClojureScript REPL iOS app Wondering what this “bootstrapped ClojureScript” hubbub is all about, and have an iOS device? There's a REPL app for that! Try the beta; experience it firsthand: https://github.com/mfikes/replete/wiki/Beta Special thanks to David Nolen and Joel Martin for making this possible!#2015-06-3008:36ordnungswidrigI just create #C070UR532 which I will monitor closely for anyone who needs help.#2015-06-3014:39ordnungswidrigclojure 1.7 is here: http://blog.cognitect.com/blog/2015/6/30/clojure-17#2015-06-3015:40gjnoonanYAY, great news#2015-06-3015:41gjnoonangood work @alexmiller http://et.al#2015-07-1502:06mfikesReplicator: A bootstrapped ClojureScript REPL for Android http://tahmid.me/posts/2015-07-15-bootstrapped-cljs-repl-for-android.html#2015-07-1503:42meow@mfikes: very cool#2015-07-1510:06ordnungswidrig@mfikes: :thumbsup::skin-tone-5:#2015-07-1513:37wilkerlucio@mfikes: nice#2015-07-1513:38mfikes@meow: @ordnungswidrig: @wilkerlucio: Credit goes to @lazy-lambda for working so hard to pull it off!#2015-07-1513:39wilkerlucio@lazy-lambda: thanks man, nice work!#2015-07-1618:55mpenetnew version of alia is out -> [cc.qbits/alia "2.6.1"] -> https://github.com/mpenet/alia/blob/master/CHANGELOG.md#2015-07-1620:07Alex Miller (Clojure team)Clojure/conj 2015 CFP is now open till Aug 14th! https://cognitect.wufoo.com/forms/clojureconj-2015-call-for-presentations/#2015-07-1813:22Alex Miller (Clojure team)Clojure 1.8.0-alpha2 is out https://groups.google.com/d/msg/clojure/LT7vDT6fWxA/OGkR5j3Y3yAJ#2015-07-2022:39mfikesReplete 1.0 iOS ClojureScript REPL app is now in App Store and is free: http://blog.fikesfarm.com/posts/2015-07-20-ios-clojurescript-repl-available-in-app-store.html#2015-07-2410:04mpenetnew version of alia is out (improved UDT, tuple support, perfs etc)-> [cc.qbits/alia "2.7.1"] -> https://github.com/mpenet/alia/blob/master/CHANGELOG.md#2015-07-2923:04Alex Miller (Clojure team)Clojure 1.8.0-alpha3 is available https://groups.google.com/d/msg/clojure/D8Bh5zmVL7c/n77dmCx3cyEJ#2015-07-3103:15danielcomptonThe first ClojureBridge in New Zealand will be held September 18-19. More details at http://www.clojurebridge.org/events/2015-09-18-auckland-nz#2015-07-3119:50mfikesPlanck 1.0: http://planck.fikesfarm.com#2015-07-3120:07meowcongrats @mfikes !#2015-08-0312:34Alex Miller (Clojure team)Clojure 1.8.0-alpha4 is available https://groups.google.com/d/msg/clojure/D9CZNGPKw-4/e1bo70grCQAJ#2015-08-0413:37mfikesPlanck 1.3 is now available via Homebrew: http://blog.fikesfarm.com/posts/2015-08-04-pour-a-pint-of-planck.html#2015-08-0415:56mfikesSpecial thanks to @nullptr for making this possible.#2015-08-1000:06mfikesPlanck 1.4 released https://github.com/mfikes/planck/releases/tag/1.4#2015-08-1202:03mfikesReplete 1.1 released: https://github.com/mfikes/replete/releases/tag/1.1#2015-08-1602:56mfikesPlanck 1.5 released https://github.com/mfikes/planck/releases/tag/1.5#2015-08-1615:59plexusSoft-launching http://Clojureverse.org http://chestnut.aren.io/t/soft-launching-clojureverse-org/105#2015-08-2413:38mpenetnew release of qbits/alia https://github.com/mpenet/alia/blob/master/CHANGELOG.md#2015-08-2419:08mfikesPlanck 1.6 released https://github.com/mfikes/planck/releases/tag/1.6#2015-08-3102:24nbergerring-logger (fork of ring.middleware.logger) 0.6.0 released https://github.com/nberger/ring-logger/releases/tag/0.6.0#2015-08-3115:48mfikesReact Native with ClojureScript is now just a one-liner to set up using Natal. https://github.com/dmotz/natal#2015-09-0101:14nbergerRing-logger 0.6.2 released, with a bugfix for the OneLog implementation. Use this release if you are going to use it with OneLog, or wait until 0.7.0 simple_smile https://github.com/nberger/ring-logger/releases/tag/0.6.2#2015-09-0218:53nbergerRing-logger 0.7.0 released. Companion projects ring-logger-timbre & ring-logger-onelog were also released. https://github.com/nberger/ring-logger/releases/tag/0.7.0#2015-09-1719:27djanusSkyscraper 0.1.2, a library for scraping of whole sites, has been released today -- https://github.com/nathell/skyscraper/blob/master/NEWS.md#012-2015-09-17#2015-09-1802:33escherizeI wanted to lend some support to Skyscraper, really great I don't have to worry about it caching, and harnessing enlive to do what it's good at. It simplifies scraping very much.#2015-09-2008:04escherizeNice get#2015-09-2523:22jrotenbergplaying around with transducers and kafka streams: https://github.com/joshrotenberg/josef#2015-09-2803:20venantiusNew release of Accountant is out with support for pushing url changes to the browser https://github.com/venantius/accountant#2015-10-0718:56kbaribeauJust released a (very) small lib to do authorization in Compojure: https://github.com/hendrick/avenue#2015-10-1606:34agile_geekCall for Papers for Clojure eXchange closes on Saturday 25th October. If you’ve got an interesting project, a story to tell about your experiences with Clojure, a cool open source library you’d like contributions to or examples of how Clojure has changed your life for the better please submit a synopsis here: https://docs.google.com/forms/d/1hQDOSXSdDF22aGRbX-K5z5MZpegdmMuOVxUgO0zBwFc/viewform?edit_requested=true#2015-10-2319:33nbergerring-logger 0.7.5 released https://github.com/nberger/ring-logger/releases/tag/0.7.5 * Add ability to redact headers & params for logging (upgrade recommended if your app handles authentication and don't want to keep passwords lying around)#2015-10-3020:36devnClara (a rules engine for Clojure) 0.9.0 was released yesterday. Also, feel free to join us over in #C08TC9JCS if that's the kind of thing you're interested in.#2015-11-0120:36venantiusLatest release of Accountant (0.1.3) is out now https://github.com/venantius/accountant/releases/tag/0.1.3#2015-11-0618:14mfikesPlanck 1.8 https://github.com/mfikes/planck/releases/tag/1.8#2015-11-0918:04venantiusUltra 0.4.0 https://github.com/venantius/ultra/releases/tag/0.4.0#2015-11-1002:04karlmikkoIf you every wished if-let and friends allow multiple bindings check out https://github.com/LockedOn/if-let#2015-11-1002:05venantiusI really just wish that stuff was in Clojure core 😛#2015-11-1002:06karlmikkosame!#2015-11-1002:06karlmikkoThat is part of why I cloned the clojure.core implementation and altered it#2015-11-1002:07karlmikkoatm the only tests are those copied from clojure.core to make sure they are compatable#2015-11-1002:20karlmikkotest in!#2015-11-1019:14richiardiandreareplumb 0.1.0 ClojureScript plumbing for your bootstrapped REPLs. is out! https://github.com/ScalaConsultants/replumb#2015-11-1503:51venantiusAccountant 0.1.5 HTML5 browser history and navigation made easy. https://github.com/venantius/accountant/releases/tag/0.1.5#2015-11-2317:41mfikesNow beta testing Replete 1.2 (ClojureScript REPL iOS app), with Parinfer for form entry. If you'd like to participate and give Parinfer a spin, DM me.#2015-11-3019:28richiardiandreaI am happy to announce http://www.clojurescript.io, built on top of replumb with love 😄#2015-11-3019:46venantiusvery cool!!! simple_smile#2015-12-0416:28Alex Miller (Clojure team)http://blog.cognitect.com/blog/2015-clojure-community-survey#2015-12-0416:28Alex Miller (Clojure team)Your feedback is requested!#2015-12-0420:09hlshipio.aviso/pretty 0.1.20 — Clojure 1.8 compatibility, better lein plugin — https://github.com/AvisoNovate/pretty — #C03S1KBA2 pretty exception reporting#2015-12-0700:56venantiusAccountant 0.1.6 is out - support for URL fragments, query parameter bugfixes - https://github.com/venantius/accountant/releases/tag/0.1.6#2015-12-1015:27mpenetFirst cut of alia 3.0.x is out (brings Cassandra 3.0 support): https://github.com/mpenet/alia#2015-12-1015:31devnhttps://cursive-ide.com/articles/cursive-1.0.html#2015-12-1015:31devnCursive 1.0!#2015-12-1018:38hlshipwalmartlabs/system-viz 0.1.0 -- Visualize component systems -- https://github.com/walmartlabs/system-viz#2015-12-1418:39jakemccReleased [com.jakemccrary/lein-test-refresh "0.12.0"]. Adds support for only running tests in namespaces that have been reloaded (`lein test-refresh :changes-only`) or configure it through a profile. https://github.com/jakemcc/lein-test-refresh/blob/master/CHANGES.md#0120#2015-12-2401:51richiardiandreaReplumb (self-hosted REPL library) 0.1.4 is out! Adds dir, apropos, find-doc together with around 300 assertions against ClojureScript core! https://github.com/ScalaConsultants/replumb/releases/tag/0.1.4#2015-12-2419:10hlshipio.aviso/toolchest - 0.1.3 -- Generally useful macros and functions -- https://github.com/AvisoNovate/toolchest Adds a macro useful for testing code expected to throw an exception#2016-01-0300:04selfsameAnnouncing pdfn 1.0 - a predicate dispatch libary https://github.com/selfsame/pdfn#2016-01-0615:36niwinzBuddy 0.9.0 released! - https://github.com/funcool/buddy - With bouncycastle version updated and many performance improvements on the cryptographic api (buddy-core) that also affects to jws/jwe speed of buddy-sign.#2016-01-0820:55hlshipio.aviso/pretty 0.1.21 https://github.com/AvisoNovate/pretty/blob/master/CHANGES.md This release adds improved docstrings for the ANSI font constants and functions. It understands Clojure's invokePrim() stack frames, and that .cljc sources (from 1.7) are also Clojure. It is now possible to parse an exception report (say, from a log file) and then format that prettily. Previously, you had to start with an exception instance. This is, of course, not perfect. There's been some incompatible changes in the binary stuff that nobody uses. 😞#2016-01-1002:01meowIt's for real. We're doing it. https://github.com/clojurians/clojurians-chat/wiki#2016-01-1019:04richiardiandrea@meow: exciting!#2016-01-1023:46mfikesTarget tvOS with ClojureScript: Ambly 0.7.0 released with support for Apple TV.#2016-01-1114:56Alex Miller (Clojure team)Clojure 1.8.0-RC5 is now available https://groups.google.com/forum/#!msg/clojure/5UjWgwTI6fY/Q06vv6cVDQAJ - we expect this to be the last RC before final release. Would appreciate any feedback, preferably on the google group thread.#2016-01-1219:36meowhttps://github.com/decomplect/mori#2016-01-1219:37meow#C0J9ENAMS#2016-01-1219:37meowall help welcome#2016-01-1219:40venantiusWhat’s the deal with the fork?#2016-01-1219:41meownot a big deal, is it#2016-01-1219:45venantiusno, I just mean, why?#2016-01-1219:45venantiushaha#2016-01-1219:45venantiususually people have a reason for announcing a fork#2016-01-1219:51meowdavid is too busy#2016-01-1219:56venantiushuh, no kidding#2016-01-1219:56venantiusI’m not sure if you’ve talked to him about this, but another approach would be asking if he’d be willing to add you as a maintainer#2016-01-1219:57venantiusbuilding support for a fork without explicit approval from the author tends to be viewed as hostile and is unlikely to gain traction#2016-01-1220:02venantiusah, just saw the conversation in #C03S1L9DN#2016-01-1220:02venantiusnot sure the fork will be successful, but good luck in either case#2016-01-1220:02venantiusit’s a cool library. needs an active maintainer.#2016-01-1220:12meowwhat is success#2016-01-1220:12meowI've forked other projects in order to get things done - not hostile#2016-01-1220:12meowanyone can fork my projects#2016-01-1220:12venantiusforking to do your own thing is totally nbd#2016-01-1220:12venantiusbut usually not publicized#2016-01-1220:13meowoh#2016-01-1220:13meowdidn't know that#2016-01-1220:13meowwhat if doing my own thing would benefit others#2016-01-1220:13venantiususually forks are publicized if (a) for some reason the project has really fallen into disrepair (which does seem to be sort of the case here), or (b) the forker is interested in taking the project in a very different direction from the primary author#2016-01-1220:14meowboth might be true here, I don't know#2016-01-1220:14meowlike david I have little time to spare#2016-01-1220:14meowbut it seemed the right thing to do#2016-01-1220:14meowso I did it#2016-01-1220:15meowand didn't want it to be a secret or perceived poorly, so I announced it#2016-01-1220:15meowso there would be no misunderstanding of my intent, which is just to help#2016-01-1220:15venantiusyeah#2016-01-1220:15venantiusanyways, like I said, it does need an active maintainer, and I wish you luck#2016-01-1220:16meowI forked it and created a channel and that's it until I get help figuring out the best way forward for those who need it#2016-01-1220:16meowtyvm#2016-01-1220:16meowI hope others will step up to maintain it because I sure cannot#2016-01-1220:16venantiusI think it might be worth checking in with David before going down this route, but one approach if you really wanted to add value would be to go through the outstanding PRs on Mori-main and seeing what’s mergeable and merging them into your fork and notifying those authors#2016-01-1220:17meowand I didn't want to waste david's time#2016-01-1220:17meowI thought david was pretty clear in his reply to me#2016-01-1220:17meowI did ask on behalf of that person who brought it up#2016-01-1220:18meowisn't this why github makes it easy to fork#2016-01-1220:18meowI thought open source was about ego-less coding and the greater good#2016-01-1220:18meowthat's why I put it under an org account, not my own#2016-01-1220:18meowI have no personal stake in this#2016-01-1220:18meowI just want to help the community#2016-01-1220:19meow@dnolen: is this ok with you#2016-01-1220:19meow@venantius: thank you - didn't realize this might be an issue#2016-01-1220:19meowI have only been doing clojure for 8 months#2016-01-1220:19dnolenI really do not care one way or the other#2016-01-1220:20meowok#2016-01-1220:20meowthanks#2016-01-1220:20venantiusgodspeed sir#2016-01-1220:20meowty both#2016-01-1220:20meowyou guys are awesome#2016-01-1415:09Alex Miller (Clojure team)The new http://clojure.org is now up!#2016-01-1415:16hans@alexmiller: shiny, congratulations!#2016-01-1417:46gjnoonanYAY! and a nice mention for clojurians, thanks @alexmiller#2016-01-1417:47Alex Miller (Clojure team)my pleasure#2016-01-1910:48dominicmhttps://github.com/SevereOverfl0w/editor-comparison Just started this due to discussion in #C03RZGPG1, it's supposed to be a fair comparison of editors, and will include links for setup for a Clojure environment. The idea is to get beginners to choose their own editor, and configure it to their Clojure needs as appropriate, and be somewhere we can point beginners asking for help on what editor to use.#2016-01-1917:35meow@dominicm: nice - needs Proton#2016-01-1917:36meowsee #C0GCNE3B3 and https://github.com/dvcrn/proton#2016-01-1917:37dominicm@meow: Needs a proton user to contribute 😛#2016-01-1917:37meowask on #C0GCNE3B3#2016-01-1919:56Alex Miller (Clojure team)Clojure 1.8 is now available! http://blog.cognitect.com/blog/2016/1/19/clojure-18#2016-01-2114:13mfikesPlanck 1.9 released, with a new website containing a comprehensive User Guide: http://planck-repl.org#2016-01-2114:26meow@mfikes: slacker#2016-01-2119:56mfikes@meow: I put in my 90%#2016-01-2120:02meow@mfikes: ?#2016-01-2211:48rickmoynihanGrafter 0.6.0 released: http://grafter.org/#2016-01-2214:21meow@rickmoynihan: that looks very cool#2016-01-2214:28rickmoynihan@meow: Thanks - do you use RDF?#2016-01-2214:31rickmoynihanIts still very much a work in progress#2016-01-2214:38meowno, but in a former life I did a lot of ETL and database work#2016-01-2214:38rickmoynihanThe DSL was built to support a user interface for building ETL transformations, kinda like openrefine... Clojure is used as the serialisation format for pipelines - so the UI basically generates clojure code which you can then execute in different contexts#2016-01-2214:39rickmoynihanbut obviously the DSL is useful for developers too#2016-01-2214:45rickmoynihanhttp://datagraft.net <-- very much a prototype#2016-01-2215:20niwinz[ann] beicon 0.6.0 released (reactive streams for cljs) - https://github.com/funcool/beicon/blob/master/CHANGES.md#version-060#2016-01-2221:48hlshipwalmartlabs/shared-deps 0.2.6 https://github.com/walmartlabs/shared-deps A leiningen plugin for managing dependencies across multi-module projects. This release improves the formatting of some error messages, and adds a Graphviz-based visualization of the dependencies.#2016-01-2703:00fdserr@mfikes: excellent read, thankies! 1.9 not brewed yet or?...
$ brew upgrade planck
Error: planck 1.7 already installed
#2016-01-2703:28mfikes@fdserr: try brew update first#2016-01-2703:33fdserr@mfikes: Did the trick, thanks. May I suggest an "updating Planck" section in the guide? ^#2016-01-2703:55mfikes@fdserr: yep, I'll add one :)#2016-01-2712:11plexusChestnut (opinionated, beginner friendly leiningen template with figwheel, om, compojure, unit testing and easy deploys) 0.9.0-SNAPSHOT is available for testing, it's a pretty big update that should bring Chestnut in line with the current state of the art#2016-01-2712:11plexusthis is likely the version that will become 0.9.0, as soon as I get around updating the documentation#2016-01-2712:12plexushere's a video where I demo it and talk about some of the changes https://www.youtube.com/watch?v=GcdAIVOWBUQ#2016-01-2911:08mpenetCassandra client, Alia 3.0.0 is out! https://groups.google.com/d/msg/clojure/NoBYtR8eYqs/hHuNmM-PEgAJ#2016-01-2914:49tangrammerHi guys, here sharing my personal approach to manage logic flows in a declarative way https://github.com/DEEP-IMPACT-AG/flowgic Looking forward your impresions, comments, other ways ... so I could keep improving it simple_smile#2016-01-2914:49plexusChestnut 0.9.0 is out https://groups.google.com/forum/#!topic/clojure/_jlzKb5Zxl0#2016-01-3023:14dominicmhttps://github.com/SevereOverfl0w/vim-cljrefactor Vim gets the ability to clean a namespace! Yay!#2016-01-3023:14dominicmI'd love a vimscript ninja to come show me how it should really be done, I'm literally just flailing around here.#2016-02-0217:03danielcomptonhttp://status.clojars.org/incidents/pdpppjllmjff#2016-02-0221:28hlshipwalmartlabs/active-status 0.1.2 https://github.com/walmartlabs/active-status Library for allowing a command line application to report status of multiple asynchronous jobs using an update-in-place status board implemented using terminal capabilities. Jobs push updates into the status board via core.async channels. Handy for really long running commands.#2016-02-0316:40jmayaalvThe beta version of "Web Development with Clojure, Second Edition" by @yogthos is now available on the Pragmatic Bookshelf! https://goo.gl/F9aDZK#2016-02-0414:30dominicmI wonder if it features mount 😜#2016-02-0417:09ordnungswidrigNice, the TOC mentions liberator.#2016-02-0417:55nkraftThe Liberator chapter is actually pretty good.#2016-02-0423:10jmayaalv@dominicm: actually it does features mount simple_smile#2016-02-0518:56hlshipio.aviso.pretty 0.1.22 Library for helping print things prettily, in Clojure - ANSI fonts, formatted exceptions The parse-exception function, added in 0.1.21, has been fixed to work when a stack frame reports "Unknown Source" instead of a file and line number. https://github.com/AvisoNovate/pretty#2016-02-0519:17hlshipwalmartlabs/active-status 0.1.3 https://github.com/walmartlabs/active-status Library for allowing a command line application to report status of multiple asynchronous jobs using an update-in-place status board implemented using terminal capabilities. Jobs push updates into the status board via core.async channels. Handy for really long running commands. This release optimizes the amount of output by batching updates to every 100ms, and makes it easier to specify the terminal type to pass to tput.#2016-02-0809:26mpenetNew version of Alia is out: https://github.com/mpenet/alia - Check the changelog if you upgrade: https://github.com/mpenet/alia/blob/master/CHANGELOG.md#2016-02-0917:00richiardiandreaNot an announcement of a library, but we open sourced (overdue, sorry about that) http://clojurescript.io! Feel free to grab any piece of code you like! Repository at: https://github.com/Lambda-X/cljs-repl-web#2016-02-0921:04meowNice. Thank you. Sharing is caring.#2016-02-0921:07venantiuslol “meow"#2016-02-0921:07venantius++#2016-02-1111:19danielcomptonClojars now supports Slack metadata: https://clojars.org/hiccup#2016-02-1217:26jakemccReleased version 0.13.0 of lein-test-refresh. Adds support for only running tests once. https://clojars.org/com.jakemccrary/lein-test-refresh#2016-02-1217:26jakemccReleased version 1.8.0 of lein-autoexpect. Adds support for only notifying you when your test status changes (passed -> fail, fail->passed) https://clojars.org/lein-autoexpect#2016-02-1502:02ajoberstarReleased 0.1.0 of Graclj (Clojure plugin for Gradle) https://github.com/graclj/graclj#2016-02-1508:33cfleming@ajoberstar: Nice, thanks!#2016-02-1518:38mihaelkonjevicKeechma - Micro framework for Reagent https://github.com/keechma/keechma#2016-02-1601:13coldnewPangu.clj - Paranoid text spacing in Clojure/ClojureScript. https://github.com/coldnew/pangu.clj#2016-02-1719:13richiardiandreaThe LambdaX blog finally ready, some old content but also a brand new Snake implementation (part 1) in ClojureScript (+re-frame) of Snake! Feedback is of course welcome and a big shoutout to Cryogen folks!! http://lambdax.io/blog/posts/2016-01-19-snake-game-part-1.html#2016-02-1808:28nha@coldnew: that looks interesting, could you elaborate why is it useful ? I have never used chinese characters in my apps maybe that's why I don't get the usefulness of this. I probably am missing something since there are projects in other languages that seem used.#2016-02-1808:34coldnew@nha: For Chinese user, we sometimes mix Chinese with English, like "我愛Clojure”, this package will convert the “我愛Clojure” to “我愛 Clojure”, which make Chinese and English not squeezed together.#2016-02-1808:34coldnew@nha: I also write one for Emacs, you can see the README: https://github.com/coldnew/pangu-spacing#2016-02-1808:35nha@coldnew: is it because people don't use spaces in chinese ?#2016-02-1808:37coldnew@nha: Yes, it’s no need to use spaces to separate different “words” in Chinese.#2016-02-1808:38nha@coldnew: ok that makes sense now thanks simple_smile#2016-02-1809:23meowTIL#2016-02-2303:00richiardiandreaReleased a big fat 0.1.5 of replumb! Big shout out to @tomek for partnering in this and the old ones 👍 https://github.com/Lambda-X/replumb/releases/tag/0.1.5#2016-02-2406:09venantiusReleased version 0.1.7 of Accountant, making it easy to build single-page applications using the HTML5 History API without a strict dependency on Secretary https://github.com/venantius/accountant/releases/tag/0.1.7#2016-02-2409:30nha@venantius: I set up my routing with om next quite painfully, so I may give it a shot ^^ (also, I would welcome an om next example)#2016-02-2418:34venantius@nha accountant works well with om; haven’t had a chance to give om next a shot yet myself so that tutorial will have to come from someone else simple_smile#2016-02-2418:34venantiusI should note that the announcement makes it sound like you once needed a strict dependency on Secretary to make SPAs. Rather, version 0.1.7 of accountant just makes it so the library will work with any underlying routing library#2016-02-2806:45arrdemJust deployed the long overdue 0.5.0 of my Grimoire https://www.conj.io/, which brings a new cheatsheet to the homepage and adds live search of the entire site, not just of the symbols listed on the homepage.#2016-02-2920:18mfikesReplete 1.2 featuring Parinfer is now available in the App Store: https://itunes.apple.com/us/app/replete/id1013465639?ls=1&amp;mt=8#2016-03-0108:16venantiusUltra 0.4.1 has now been released, with intelligent fallback support for projects still on Clojure 1.6.0 and prior, as well as smarter defaults and updated dependencies https://github.com/venantius/ultra#2016-03-0117:41nkraftUltra is the cats pajamas for my repl. Nicely done.#2016-03-0117:57venantiushaha, thanks! simple_smile#2016-03-0219:55seancorfieldGiven the low number of folks here and the change of name of the main auto-joined channel to #C03RZGPG1 — which seems to have worked well — we’re going to archive this smaller announcements channel to avoid confusion.#2018-05-2817:09tristefigureI released lexikon yesterday. It's a library to capture and replay the lexical environment. https://github.com/TristeFigure/lexikon#2018-08-0204:19andy.fingerhuthttps://github.com/jafingerhut/funjible#2018-08-0314:52mauricio.szaboWow, this is interesting! Also, it could mean it's easier to port clojure to other VMs (less Java code).#2018-08-0611:12flowthingI recently created a library for personal use that takes the spec/instrumentation approach to checking the args of clojure.set functions (https://github.com/eerohele/flowthing.set.specs.alpha). I was curious about your views on whether the set functions should allow nil args. I see your library disallows them, which makes sense, but I was just curious whether you considered allowing them…?#2018-08-0616:27andy.fingerhutI had not considered the question of allowing nil arguments, taking the straightforward "sets only" approach. Have you tried out their implementations with nil arguments to see if they all handle them cleanly?#2018-08-0706:06flowthingWell, depends on what you consider clean... they won't throw any errors if you pass in nil, as expected, but they might return nil instead of a set. set/index and set/map-invert are exceptions: if given a nil arg, they return an empty map instead of a nil. There are some test cases here that illustrate how they behave with nil args: https://github.com/eerohele/flowthing.set.specs.alpha/blob/master/test/flowthing/set/specs/alpha_test.clj#2018-08-0715:53andy.fingerhutNow that you have led me to consider the question of whether nil args should be allowed for functions in clojure.set, or not, I can definitely say I have a preference for the stricter "no nil, only sets" version. However, I don't have any well-thought out explanation for why. 🙂#2018-08-0805:55flowthingHeh, I hear ya, I've been struggling with it for a while now. I'm inclined to agree with your sets-only approach, though. I allowed nils in my library pretty much only because instrumentation checks all the code currently in play (including dependencies) and I figured the chance that someone somewhere down the dependency chain passes a nil arg to a set function is pretty high.#2018-08-0805:58flowthingI haven't yet made the final decision on which way to go, though... I think that one thing that speaks for a sets-only approach is that allowing only set args makes things more predictable. If you pass in a set, you'll always get back a set.#2018-08-0806:00flowthingThen again, I don't know whether any core function specifically disallows nil args…#2018-08-0810:36flowthingI gave it a quick try and discovered that clojure.tools.nrepl, for example, has code can call set functions with nil args. I didn't track down what going on exactly, but it appears to occur somewhere in here: https://github.com/clojure/tools.nrepl/blob/d5e29f4473f4444d56858d67d123b9c5375d6353/src/main/clojure/clojure/tools/nrepl/middleware.clj#L92#2018-08-0810:37flowthingSo I think with instrumentation, at least, disallowing nil args might not be feasible. If you could only enable instrumentation for my-namespace.* or something, then maybe.#2018-08-0212:44Shantanu KumarPromenade https://github.com/kumarshantanu/promenade 0.6.0 is released to Clojars, adding support for (1) wrapping functions that throw exceptions, and (2) early termination in reducing functions#2018-08-0214:40Shantanu KumarFurther discussion in #promenade#2018-08-0223:47danielcomptonClojurists Together is funding cljdoc and Shadow CLJS for the next three months: https://www.clojuriststogether.org/news/q3-2018-funding-announcement/#2018-08-1006:46jerger_at_ddaJust fixed some bugs in dda-git-crates new release: https://github.com/DomainDrivenArchitecture/dda-git-crate#2018-08-1012:06jerger_at_ddaFeatureRelease for dda-serverspec-crate. We now support free form bash-scripts for testing: https://github.com/DomainDrivenArchitecture/dda-serverspec-crate#2018-08-1106:26tony.kayFucro 2.6.0-RC6 is now available on clojars. This rounds out the new React 16+ lifecycle support, a rework of the rendering for better React 16+ compatibility, and a few bug fixes. https://github.com/fulcrologic/fulcro#2018-08-1110:48miikkaI'd like to get Clojure(Script) open-source maintainers thinking about fully automating the release processes for their projects, so here's a blog post about it: https://quanttype.net/posts/2018-08-11-fully-automated-releases.html#2018-08-1111:07martinklepschI’d love to see that being more of a thing. I’m wondering: with fully automated releases how would you tag releases in git or otherwise mark revisions? Would CI push that info back into your git repo? #2018-08-1112:18miikkaYeah, exactly#2018-08-1119:54rymndhng^ i can see this integrating with something like lein-v which allows uniquely identifying non-release builds https://github.com/roomkey/lein-v#2018-08-1119:56rymndhngthe nice thing about the approach with lein-v is that it decouples releasing from versioning information Benefits of lein-v: - You don't need to give your build system git write access - You avoid having noisy version bump commits in your code (because it's driven from git tags)#2018-08-1320:08mauricio.szaboI'm kinda automating my releases, publishing a -SNAPSHOT release every merge to master and publishing a version every tag...#2018-08-1320:08mauricio.szaboBut I'm not using lein-v (yet? Maybe?)#2018-08-1502:19Bobbi TowersI set up a Cryogen site on Gitlab using these directions: https://runswithd6s.gitlab.io/ but then I thought hey, that was easy, but what if it was as easy as Jekyll Now, a project you simply fork for an instant site on Github Pages. So I went ahead and made one: https://gitlab.com/cryogenweb/cryogenweb.gitlab.io#2018-08-1504:54tiensonqinHi guys, I just published https://github.com/tiensonqin/lambdahackers, lambdahackers is a reddit-like community for programmers to discuss and share. I'm using shadow-cljs by @thheller, rum and citrus by @roman01la, with server side rendering and pwa support.#2018-08-1507:30dangercoderThanks a lot for open sourcing this, gave me some inspiration for how you can solve things! Great job 🙂#2018-08-1508:17tiensonqinThanks for your kind words! Ask any problems in the repo if you have.#2018-08-1515:31johnThat's really cool!#2018-08-1516:51Bobbi TowersNew Clojure blog Just Juxt! https://porkostomus.gitlab.io/justjuxt/ Every day I post a different solution using juxt, beginning today with the Fibonaccis.#2018-08-1517:14Alex Miller (Clojure team)Every day?!!! Can’t wait to see this next year... :)#2018-08-1517:19emil0r404#2018-08-1517:19Bobbi Towersfixed it!#2018-08-1518:26tanzoniteblackAdd this to planet clojure? https://github.com/ghoseb/planet.clojure#adding-yourself-to-planet-clojure#2018-08-1522:01Bobbi TowersWill do. Thanks for telling me about it!#2018-08-1616:08tanzoniteblack@U8LB00QMD your RSS feed is pointing to /blog/... which doesn't seem to exist? i.e. RSS feed entry: https://porkostomus.gitlab.io/blog/posts-output/2018-08-16-Just-Juxt-2/ should be: https://porkostomus.gitlab.io/posts-output/2018-08-16-Just-Juxt-2/#2018-08-1620:25Bobbi TowersWow, weird. Thanks for letting me know!#2018-08-1617:32delaguardoaxel-f was released! Expression language with Excel-like syntax. Available in Clojure and ClojureScript https://github.com/xapix-io/axel-f#2018-08-1801:02Bobbi TowersI just finished today's (just juxt). This is so much fun! https://porkostomus.gitlab.io/posts-output/2018-08-17-Just-Juxt-3/#2018-08-1811:33xtreak29Stream processing with Redis streams and Clojure : https://tirkarthi.github.io/programming/2018/08/17/redis-streams-clojure.html Edit : Sorry for some reason my app posted it twice#2018-08-1916:46nonrecursiveI’ve released Specmonstah, a library for setting up test data in a database: https://github.com/reifyhealth/specmonstah/#2018-08-2122:41aviHi Daniel, congrats on releasing Specmonstah — I think it’s really promising and the docs are especially impressive! I just wanted to share one quick thought — you described it above as being “for setting up test data in a database” — this makes sense, but might be a bit limiting? e.g. I’m working on a project that works with graphs, and there’s no database involved. I’m interested in using Specmonstah to power a custom generator for the spec for my graph — it might be a powerful way to make my generative tests even more effective. Does that make any sense?#2018-08-2313:44nonrecursive@U69US348Z that makes sense! and the description is indeed limiting. I’m still trying to figure out how to describe it one or two lines 😛#2018-08-2313:45nonrecursivethe idea is more that it gives you a way to succinctly express what graph of entities you want to create, and then a way to do things with those entities in topsort order (even that is limiting in that it handles cycles, which can’t be topsorted)#2018-08-2314:08aviYeah, I definitely see the challenge. I’m working on a framework for software architecture diagramming and it’s difficult to explain the value proposition in a concise phrase. And with Specmonstah you have the additional challenge that an accurate description could seem too abstract/theoretical to some people, could scare them off or otherwise repel them; a more concrete description is likely to be more friendly.#2018-08-2011:42plexushttps://clojureverse.org/t/new-maintainer-for-chestnut-say-hi-to-jeff/2689#2018-08-2213:09renewdoithttps://github.com/robertluo/pull#2018-08-2213:10renewdoitBug fixed version for https://github.com/juxt/pull 0.2.0#2018-08-2213:12renewdoitIn my projects, it can expose Pull API of Datomic to client as endpoints of web service without leaking implementation details.#2018-08-2323:46ghadihttps://mobile.twitter.com/mreinhold/status/1032766266035994624#2018-08-2323:46ghadiHappy to discuss in #clojure#2018-08-2401:10wilkerlucioFulcro Inspect [`1.0.3`(extension)/`2.2.2`(package)] is out! This version uses state deltas to sync the app state, this adds a considerable performance gain for apps with big local dbs. Also adds a new button at the network layer, right after the Request there is a Send to query button that will select the Query tab and fill the query using the selected request. https://github.com/fulcrologic/fulcro-inspect#2018-08-2419:57leocardosoHello! I made some snippets from clojure to vscode, anyone who has suggestions please tell me https://marketplace.visualstudio.com/items?itemName=leocardoso94.clojure-snippets#2018-08-2420:47seancorfieldFollow-up in #vscode yes?#2018-08-2500:15tony.kayI’m happy to announce Fulcro 2.6.0 is on Clojars. https://github.com/fulcrologic/fulcro This new release includes a complete rework of the internals to work with React 16's new lifecycle methods, and should be forward compatible to React 17 when it ships. It also includes a number of improvements, and maintains backward compatibility with React 15 (though 16 is now the default).#2018-08-2601:11tony.kayhttps://github.com/fulcrologic/fulcro-spec Fulcro spec 2.2.1 released. This new version better explains how it can be used with clojure.test to augment your testing experience, and includes two new mocking utilities that verify the clojure.spec conformance of mocks to prevent unit tests that pass for bad reasons.#2018-08-2603:49Chris BurginReleased my first Clojure package today, Marker! https://github.com/chrisburgin95/marker#2018-08-2604:10seancorfieldDiscussions about announcements should happen in other channels. Feedback on your code could be in #code-reviews Feedback on the library itself could happen in #clojure (unless you feel another channel is more appropriate).#2018-08-2604:16Chris BurginAwesome, updated post to remove feedback discussion, thanks for the direction on discussion location Sean!#2018-08-2612:34bozhidarAfter over 1 year without a release clj-refactor.el 2.4 and refactor-nrepl 2.4 are finally out! Read the important highlights here https://github.com/clojure-emacs/clj-refactor.el/blob/master/CHANGELOG.md#240-2018-08-26 … TLDR; They work with Java 9+, CIDER 0.17+ and nREPL 0.4.x. 🙂#2018-08-3001:03danielcompton🎙️ The REPL now has a podcast to go along with the newsletter:studio_microphone:. The first episode has an interview with Michael Drogalis about Onyx, Pyrostore, the acquisition by Confluent, stream processing, and much more. You can find it at https://therepl.net/episodes/1/. Apple Podcasts links are coming soon, but you can subscribe via the feed on the website.#2018-08-3114:28Alex Miller (Clojure team)Today is the last day for Clojure/conj 2018 submissions! We would love to see your proposal at http://2018.clojure-conj.org/call-for-proposals/. (And realistically we will leave the form open all weekend if you’re worried about getting it in last minute.) Feel free to ask questions in #clojure-conj if needed.#2018-08-3117:34igrishaev#2018-09-0121:27martinbThis is so timely. I spent the afternoon today trying to use the Google Cloud Java API from Clojure. Does the book also cover using code written in Clojure from the Java side, i.e. reverse interop?#2018-09-0217:02bozhidarCIDER 0.18 (Saigon) is out! Read all about it here https://github.com/clojure-emacs/cider/releases/tag/v0.18.0 TL;DR: Yeah, those are a TON of changes indeed! Pay close attention to everything marked with “Breaking”, as some of those might surprise you! Generally you should know the following: * CIDER now supports nREPL 0.4 * We’ve revamped completely the connection management, so be sure to check http://www.cider.mx/en/latest/managing_connections/ * Now the canonical way to start CIDER is C-c M-x (M-x cider) or C-c C-x .... The old jack-in and connect keybindings will be removed at some point for the sake of consistency. * CIDER will now auto-inject piggieback for ClojureScript REPLs. * Many keymaps were changed significantly in order to make them consistent, group related actions together and to free up keys on the top-level (C-c C/M-letter). * CIDER and cider-nrepl are now released independently (not really obvious now, but should become clear what I mean after a few releases). Thanks to everyone who helped with the current release! I love you all! Special thanks to the London Clojurians, Daniel Compton and Clojurists Together for their support! Now it’s time for me to take a long break and enjoy a few mugs of cold cider! Cheers!#2018-09-0217:02bozhidarThere’s also a new nREPL release - https://github.com/nrepl/nREPL/releases/tag/0.4.5#2018-09-0217:02bozhidarDouble party! 😉#2018-09-0319:05ikitommiWelcome [metosin/reitit "0.2.0"]! Reitit is a fast data-driven routing library for Clojure/Script. 0.2.0 has lot of new stuff, including: * new reitit-frontend module for browser-based routing apps - fragment & html5 history + keechma-style controllers * new reitit-middleware module with extra data-driven batteries for ring (exceptions, content-negotiation, multipart) * new reitit-http module bringing support to pedestal-style interceptors + example how to run reitit with pedestal * new reitit-sieppari - module for simplified interceptor execution (mega-alpha) * support for (duct-style) middleware & interceptor registries * new fast and correct path parameter decoder - for both jvm & js * improvements for swagger support for both schema & clojure.spec * automatic route name conflict resolution * guide for composable & dynamic routers * support for sequential routes the source: https://github.com/metosin/reitit posted: https://www.metosin.fi/blog/reitit020/ big thanks to all contributors. #reitit for chatting#2018-09-0413:17renewdoithttps://github.com/robertluo/pull#2018-09-0413:18renewdoitJust released 0.2.4, with datomic.Entity fully supported, since it does not implement java.util.Map #2018-09-0413:19renewdoitIt also opens the door to pull any data structure, you just need to adapt one single function protocol.#2018-09-0414:57practicalli-johnI've created the #100-days-of-code channel to share my experiences as I take the challenge to code (Clojure) for a minimum of 1 hour a day for 100 days. If anyone wishes to join me, then its also a place we can collaborate. I start the challenge on 15th September which should take me up to the 24th December. I hope to complete all the 4clojure challenges along the way, use at least 100 different functions from Clojure.core, solve a range of kata style problems using clojure.test and include the advent of code exercises during December. I If I can also contribute to https://24pullrequests.com/ and hack on some https://www.codewars.com/ challenges, that will be a bonus.#2018-09-0506:47eccentric JGood luck! Somehow I was able pull it off a few months back. Definitely have some projects ready to choose from and keep some small ones on hand if time runs low on a particular day. No shame in writing a small example for a day to better understand how to use a certain function or language feature 😄#2018-09-0513:05Alex Miller (Clojure team)Clojure 1.10.0-alpha7 now available https://groups.google.com/d/msg/clojure/q28JgREUelc/-snKmffcEQAJ#2018-09-0513:05Alex Miller (Clojure team)spec.alpha 0.2.176 and core.specs.alpha 0.2.44 now available https://groups.google.com/d/msg/clojure/OypDdwYB-cI/Yl1zpjalBAAJ#2018-09-0514:03eggsyntax'New releases...are not available.' Typo, I presume ;)#2018-09-0521:15AvichalHello, I created a small debugging tool for myself. This tool helps me to have visibility of the database while I am developing the frontend. I wanted to share to see if it can help others too. It is simply like a “PSQL watch” command but over websockets and with a web UI. It is built using Re-frame + Compojure and Sente for websockets. This is my first Clojure project after fiddling with the language for quite sometime. Thanks for these amazing libraries and ecosystem. Your feedback is most welcome. https://github.com/avichalp/wow#2018-09-0521:17Mario C.I think I saw this on /r/clojure#2018-09-0521:26wilkerlucioplease leave comments on threads or follow up channels, messages here should be strictly about announcements#2018-09-0521:28Mario C.sorry#2018-09-0521:58Avichaloh yeah, I posted earlier in r/clojure too. Thought would be cool to share here as well. Hope this doesn’t seem like spam.#2018-09-0608:14martinklepsch@U3ZPBUVJ7 no worries, I’m sure it’s appreciated. Wilker’s comment was purely about follow up discussion which should be done elsewhere :) #2018-09-0712:54tristefigureHey, I made yet another threading library. What's special about it: - Any arrow defined in this library will thread the passed expression into its arguments. They all obey the form (arrow threading-slot-1 threading-slot-2 ... threading-slot-n). Looking at you cond->. - The anti-threading arrow <- can be used as an equivalent of constantly. (-> 1 (<- 100)) returns 100. - A bunch of arrow fletchings. - Transitionning from ->> to ->: (->> 1 (>>- (-> (/ 2)))) returns 1/2. - Moving an arrow onto a form's arguments: (-> 1 (>-args (-> (+ inc inc inc)))) returns 6. - The teleport fletching/arrow: (-> 5 (•- (+ 1 (-• (* 100))))) returns 501. https://github.com/TristeFigure/threading#2018-09-0713:12eggsyntaxI love the teleport! Is that original to you?#2018-09-0713:58tristefigureThank you ! I wrote it yesterday so it may well be unique to this library but I wouldn't be surprised to find it in other threading libraries. There is also Haskell arrows to ponder on. https://www.haskell.org/arrows/#2018-09-0714:02eggsyntaxI know there are a couple of older clj libs as well which define various other arrows. The one I remember offhand is https://github.com/rplevy/swiss-arrows And there's some discussion of them in the academic literature, IIRC, where they're given bird names, although I can't remember what those are at the moment. I can track it down if you're not already aware.#2018-09-0714:04eggsyntaxThrush operators, that's it.#2018-09-0714:04tristefigureNo need to, I checked them all out.#2018-09-0714:04eggsyntax:thumbsup:#2018-09-0712:56tristefigureOh and stuffs like if->, or->, when-not->, map->, binding->, let-> ... All arrows comme with both -> and ->> variants. There is a also a defthreading macro to define them easily.#2018-09-0714:00renewdoitRelease fun-map 0.2.0, a map can automatically unwrap any value from identities (ref, atom, promise, delay, future …) etc, and provides a new way to construct function invocation path, it allows you decouple function dependencies and can be changed anytime without change function implementation code, make unit testing your function with plain value, but replace it anytime in integration. It can be used as a replacement of prismatic graph with more possibility. It also can replace component library for integration, by introduce no dependency of your code, you write your stoppable component without adapt any protocol or any multimethod implementation. Just put your component in a fun-map as a value, and it’s good to go. A fun-map is just a normal map with auto unboxing ability, it can be used interchangeable with any plain map, all magics are done by the wrapped value/function/identity. https://github.com/robertluo/fun-map#2018-09-0720:17ericnormandI just wanted to let people know that I have open spots for training and/or consulting in Clojure. Please contact <mailto:/cdn-cgi/l/email-protection|/cdn-cgi/l/email-protection> if you are interested.#2018-09-0816:10uwoJust a simple idea of slurping and spitting to paste buffer that I’ve gotten a lot of use out of on osx. Easily adaptable to a linux cli tool. https://gist.github.com/uwo/23b7a81fd97818368400bb7c02086562#2018-09-0817:09val_waeselynckWorth noting that it won't work for remote REPLs though!#2018-09-0817:12uwoindeed! only a local dev convenience.
#2018-09-1013:08Rachel WestmacottI think you can do this in a platform independent way with Java interop using eg:
(defn ->clipboard [text]
  (let [ss (StringSelection. text)]
    (-> (Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents ss ss))))
#2018-09-1013:39uwoI had used that, but preferred to not spin up the java task. Pollutes my alt-tabbing 😄#2018-09-1111:02flowthingI haven't used that, but wouldn't setting the java.awt.headless system property to true avoid the Alt+Tab pollution?#2018-09-1113:33Rachel Westmacottif you set it to headless you can’t use the clipboard: HeadlessException sun.awt.HeadlessToolkit.getSystemClipboard (HeadlessToolkit.java:309)#2018-09-0913:19rutledgepaulvAnnouncing [com.vodori/missing "0.1.0"]. Missing is a utility library for Clojure intended to complement what’s already available in clojure.core. It includes additional transducers; <, >, <=, >= variants that work on comparables not just numbers; lazy merge sort; functions for indexing collections into maps; locking on values; topological sorts; and more. https://github.com/vodori/missing#2018-09-1120:09blueberryhttps://dragan.rocks/articles/18/SmallFP-presentation-Interactive-Functional-GPU-Accellerated-Programming-Clojure#2018-09-1303:23richiardiandreaClojureScript utility for Terraform released today: https://twitter.com/richiardiandrea/status/1040064598685102080?s=20#2018-09-1306:44nilrecurringAnnouncing [dhall-clj/dhall-clj "0.1.0"], a compiler from Dhall to Clojure: https://twitter.com/fabferrai/status/1040126114599981056 Dhall is a non-Turing complete, typed functional programming language. Some usecases: modular and typechecked configurations, typed data language for the wire (has an efficient binary representation), CI orchestration#2018-09-1306:45nilrecurringMore about Dhall in the language standard repo: https://github.com/dhall-lang/dhall-lang#2018-09-1311:00mpenetCongrats! And the first cc.qbits/ex user I see in the wild. Thanks for the mention btw 😉#2018-09-1312:23nilrecurringThanks a lot for making a great library :)#2018-09-1307:31seancorfieldclj -Sdeps '{:deps {org.clojure/tools.cli {:mvn/version "0.4.0"}}}' -- Tools for working with command line arguments. https://github.com/clojure/tools.cli#change-log Converted to .cljc to provide complete parity between Clojure and ClojureScript versions; added deps.edn for use with clj; drops support for Clojure 1.7 and earlier. Follow-up to #clojure#2018-09-1307:35seancorfield{seancorfield/clj-new {:git/url "" :sha "21ca1b27f46dc324be084ba839beca555aeda387"}} -- generate new projects with clj! https://github.com/seancorfield/clj-new Now supports various command-line arguments to control project creation / code generation. Follow-up to #tools-deps#2018-09-1313:01rutledgepaulvAnnouncing [com.vodori/chronology "0.1.0"]. Chronology is a small library for working with cron expressions and scheduling tasks. It provides infinite sequences of cron expressions (both forwards and backwards!) and provides a small layer to schedule functions as periodic tasks using core.async machinery. https://github.com/vodori/chronology#2018-09-1416:55hlshipcom.walmartlabs/lacinia 0.29.0 and lacinia-pedestal 0.10.0 Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Featured changes in 0.29.0: - Updates to support June 2018 revision of the GraphQL spec - Improved support for injecting documentation and other values into a schema - Support for block strings in query and schema documents - Support for strings/blockstrings as schema element descriptions - Fix compatibility with Clojure 1.8 lacinia-pedestal provides the Pedestal support to expose web endpoints backed by Lacinia's GraphQL. GitHub repo: https://github.com/walmartlabs/lacinia-pedestal Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/ Featured changes in 0.10.0: - Compatibility with lacinia 0.29.0 - Added a spec for the service-map function - Split up the default interceptor chain somewhat, to support server-side queries in the future#2018-09-1712:51damianHi! Here in Magnet we’ve played a bit with Conformity - a migration library by @avey_q. However we’ve had some issues with transactions getting reapplied unexpectedly so we’ve developed a simplified, atomic version of it. We haven’t explored Ragtime by @weavejester yet, but in case it’s useful for some of you, there it is lying. https://github.com/magnetcoop/stork#2018-09-1713:56rborerHi there, in case you wonder which Java JDK you'll need to use when Java 11 will be out, the folks at jClarity ERRATA: the java champions did an awesome summary on all the available options (both free & paid) within this document cleverly named "Java is still free": https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/edit?usp=sharing 🙂#2018-09-1715:02practicalli-johnThere is also a *Java is still available at zero-cost* blog post that summarizes the jClarity info https://blog.joda.org/2018/08/java-is-still-available-at-zero-cost.html?__s=bcofydr54pntadt2aeze#2018-09-1723:50gigasquidApache MXNet 1.3.0 is out along with the Clojure bindings! https://medium.com/apache-mxnet/announcing-apache-mxnet-1-3-484ea78c22ad - The jars are out on maven central https://search.maven.org/search?q=g:org.apache.mxnet.contrib.clojure. If you are interested or need help. Head on over to the #mxnet room#2018-09-1801:43Eric Scott👍 #2018-09-1817:17pesterhazyNew version of cljs-spa-example, featuring simplified global exports configuration and automatic headless testing cljs-spa-example is a small demo application demonstrating (what I think are) best practices when building Single Page Applications today. It's based on the new Figwheel Main 0.1.9 release. Check the README for the explanation of some of the choices and ideas behind the project. https://github.com/pesterhazy/cljs-spa-example#2018-09-2311:02plexusKaocha 0.0-173 is out, with improved autorunner and REPL API https://clojureverse.org/t/announcing-kaocha-a-new-and-improved-clojure-test-runner/2903#2018-09-2318:01andy.fingerhutThere is now a published transcript for Rich Hickey's talk on Datomic Ions that he presented at clojure/nyc on Sep 12, 2018. If you have a better source for images of some of the slides, or know what he was saying in a few parts I couldn't understand marked "tbd", please open an issue or PR to improve it: https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/DatomicIons.md#2018-09-2318:24seancorfield[org.clojure/tools.cli "0.4.1"] Tools for working with command line arguments (Clojure & ClojureScript) -- https://github.com/clojure/tools.cli#change-log -- adds :update-fn and :default-fn for better control over repeated arguments and default values. Follow-up to #clojure (or via DM).#2018-09-2407:15roklenarcicI've made a small library for fashioning REST requests. *Feedback welcome* https://github.com/RokLenarcic/clj-rest-client#2018-09-2605:19miikka[metosin/scjsv "0.5.0"] is out. scjsv is a Clojure library for JSON Schema validation. Changelog here: https://github.com/metosin/scjsv/blob/master/CHANGELOG.md#2018-09-2608:39reborgLondon crowd, tomorrow night, nice speakers lineup haskell/clojure/functional at https://www.meetup.com/London-Functionals/events/254679448/#2018-09-2821:01hlshipio.aviso/pretty 0.1.35 https://github.com/AvisoNovate/pretty > Sometimes, neatness counts io.aviso/pretty is a library and Leiningen plugin that adds well formatted, readable output of Clojure exceptions. It's pretty indispensable to the tune of 1.5 million downloads, and is integrated into the Ultra plugin as well as Boot. This release honors the sorting order of sorted maps and adds an optional namespace, used with Stuart Sierra's component library, that removes the excessive output that pretty printing a system map can cause.#2018-09-2822:17tony.kayFulcro now has really nice GraphQL integration via Pathom. New video overview here: https://youtu.be/Yk7xFry0w2Y#2018-09-3019:19wilkerlucioPathom updated docs (thanks to @tony.kay) are live, many sections got a lot of improvement! A highlight to the new GraphQL integration docs: https://wilkerlucio.github.io/pathom/DevelopersGuide.html#GraphQL#2018-09-3022:47danielcomptonClojurists Together has finished our latest survey and have a list of focus areas for our next funding round: https://www.clojuriststogether.org/news/q4-2018-survey-results. Encourage the projects that you depend on to apply for funding. If you have any questions about applying, please get in touch here or via any of the other places you can find me 🙂. Applications close 9th October#2018-10-0120:05beta1036I've seen this in the code, and wanted to know the reasons for it being this way. I was surprised that keywords can take sets, and even more surprised that they can only take IPersistentSet or ITransientSet whereas java.util.Map is supported.#2018-10-0120:06beta1036Is there an idiomatic use for applying a keyword to a set?#2018-10-0120:19seancorfield@U4844LY6A (Clojure) sets are associative on their keys -- like a map whose values are the same as their keys -- so you can call "get" on them. Java sets don't have that associative lookup -- only a "contains" operation. That would be my understanding of why you can lookup keywords in (Clojure) sets but not Java sets.#2018-10-0120:22seancorfield(and arrays are associative on their indices -- so, again, it makes sense to allow lookup "get" on those)#2018-10-0120:23seancorfieldDoes that make sense?#2018-10-0120:26beta1036Having get on maps, sets and arrays makes sense to me.#2018-10-0120:27beta1036It would make more sense to me if keyword application either supported java sets or not supported any sets at all. And of course supporting keyword application on vectors makes no sense at all.#2018-10-0120:28beta1036The fact that java sets don't have a get operation seems like a weak excuse for not supporting them.#2018-10-0120:29beta1036But I'm not complaining, since I don't have any use for applying keywords to sets at the moment. 🙂#2018-10-0121:04seancorfieldClojure is based on abstractions. map, set, and vector are associative in Clojure, hence should all support get. Java's Map is associative, Java's Set is not.#2018-10-0121:06seancorfieldRe: keyword on vector -- vectors are associative on their index so, no, Clojure does not support keyword lookup on them. (kw coll) is "the same" as (coll kw) which is "the same" as (get coll kw) and for vectors (coll ix) is the shorthand.#2018-10-0118:27wilkerlucio[spec-coerce "1.0.0-alpha7"] is out https://github.com/wilkerlucio/spec-coerce This update makes the date parsing more permissive on the Clojure side (thanks @seancorfield!), also adds the new functions sc/conform (coerce and then conform) and sc/coerce! (trigger exception if coercion doesn't work).#2018-10-0119:40hlshipcom.walmartlabs/lacinia 0.30.0 Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Featured changes in 0.30.0: - Can now wrap individual items in a list, not just the entire list - Fix bug with attach-resolvers, if a resolve function is already attached#2018-10-0122:07seancorfield{honeysql {:mvn/version "0.9.4"}} or [honeysql "0.9.4"] https://github.com/jkk/honeysql -- SQL as Clojure data structures. Build queries programmatically -- even at runtime -- without having to bash strings together. -- bug fix release! Follow-up in #honeysql#2018-10-0215:10devthhttps://github.com/yetibot/yetibot Yetibot is a Clojure chatbot that supports fun bash-like expressions including pipes, aliases, sub-expressions and a whole lot more. If you're interested in participating in Hacktoberfest here are some good first-time contributor issues https://github.com/yetibot/yetibot/labels/Hacktoberfest#2018-10-0216:36eval2020eval/otarta "0.3.0" Otarta - an MQTT-library for ClojureScript. Give the first public release a try! Supports: - easy configuration via a broker-url - publish/subscribe using core-async channels (QoS 0) - payload formatting (edn, json, transit, your own) - example CI-dashboard added (see README.md) https://gitlab.com/eval/otarta/tree/master#otarta#2018-10-0316:42hlshipcom.walmartlabs/cond-let 1.0.0 A micro library of a single macro, cond-let. cond-let acts like a cond, but adds :let terms that are followed by a binding form (like let). This allows conditional code to introduce new local symbols; the result is clearer, more linear code, that doesn't make a march for the right margin. Example:
(defn ^:private has-necessary-capabilities?
  "Does the worker have all the capabilities that the job needs?"
  [state worker-id task]
  (cond-let

    :let [job-id (:job-id task)]

    (nil? job-id)
    true

    :let [capabilities (get-in state [:jobs job-id :clockwork/required-capabilities])]

    (empty? capabilities)
    true

    :let [worker-capabilities (get-in state [:workers worker-id :capabilities])]

    (empty? worker-capabilities)
    false

    :else
    ;; It's ok for the worker to have *more* capabilities than are specified.
    ;; For each required capability, we need an exact match.
    (= (select-keys worker-capabilities (keys capabilities))
       capabilities)))
https://github.com/walmartlabs/cond-let
#2018-10-0317:13schmeehow is this different from https://github.com/Engelberg/better-cond?#2018-10-0320:32hlshipIt isn't. Wasn't aware of the other.#2018-10-0413:27danielneal❤️ better cond, and this idea. I like how it stops the rightward drift. I do keep trying to sneak it into projects but usually get shut down because it's an additional dependency#2018-10-0416:26vemvSimilarly I have https://github.com/vemv/with in the oven, it has two advantages: - decomplected from cond, I'm not interested in a turbocharged cond - accepts arbitrary symbols/keywords instead of whitelisting a few acceptable forms (namely let, when, when-let) I want to make a breaking API change before a release/announcement but if the idea excites you, hit me up 🙂#2018-10-0511:15danielnealooh interesting#2018-10-0418:53Bobbi TowersNew episode of Apropos starting soon, get your Clojure news, REPL demos and live chat https://www.youtube.com/watch?v=knX0QMnfwqE#2018-10-0418:56mauricio.szaboI don't know if this is the correct channel, but I'm writing a plug-in for Atom to connect with SocketREPL (Clojure and ClojureScript). I just documented my experience in working with ClojureScript for plug-ins here: https://mauricio.szabo.link/blog/2018/10/02/atom-packages-with-clojurescript-upgraded/ 😄#2018-10-0502:32Alex Miller (Clojure team)Clojure 1.10.0-alpha9 is now available https://groups.google.com/forum/#!msg/clojure/ErhMQYuquq4/XMs34sVlAgAJ#2018-10-0512:53martinklepschClojuristsTogether deadline for the next funding round is next Tuesday Oct 9th. If you maintain Clojure OSS, consider applying: https://www.clojuriststogether.org/open-source/ 🎉#2018-10-0521:56carocadhey guys, I have been using this for a while in a project of mine and decided to make it a library. https://github.com/hiposfer/rata#2018-10-0604:16Alex Miller (Clojure team)Clojure 1.10.0-beta1 is now available https://groups.google.com/d/msg/clojure/6hJM5q_CC_M/FzolPjm6AgAJ#2018-10-0604:22Alex Miller (Clojure team)Changelog has been updated with all changes since 1.9: https://github.com/clojure/clojure/blob/master/changes.md#2018-10-0921:21Alex Miller (Clojure team)Clojure 1.10.0-beta2 is now available https://groups.google.com/d/msg/clojure/NLTR_FoA9ZA/iy95Kn37AQAJ#2018-10-0922:21rutledgepaulvCurious about the motivations behind datafy. Is it as plain as establishing a core protocol for exposing opaque things as something easy to work with?#2018-10-1013:33eggsyntax@U5RCSJ6BB happened to see a bit of discussion about it on twitter this morning: https://twitter.com/mfikes/status/1049412122810220544#2018-10-1014:02Alex Miller (Clojure team)some more blathering if that helps https://www.reddit.com/r/Clojure/comments/9mt700/ann_clojure_1100beta2_is_now_available/e7hkzji/#2018-10-1009:49yogidevbearMorning everyone 🙂 I recently interviewed @seancorfield for the JUXT Clojure In series. Please can you share the love if you're able to ❤️ https://twitter.com/juxtpro/status/1049957394489462784?s=19#2018-10-1010:37yogidevbearP.S. Thank you Sean again for taking time out to make this article a reality 🙂 It was great fun to write up!#2018-10-1115:17Alex Miller (Clojure team)Clojure 1.10.0-RC1 is now available (same code as beta2). PLEASE TEST and provide feedback - this is a release candidate.#2018-10-1317:36mauricio.szaboJust published my SocketREPL package for Atom editor: https://atom.io/packages/chlorine It's still alpha quality, but so far, I'm able to connect to Clojure, evaluate code, upgrade Clojure REPL to ClojureScript (shadow-cljs only, no figwheel yet), and autocomplete. Also, this package is a playground to replicate these changes in another editors like NeoVIM and possibly VS Code#2018-10-1407:44olieidelPublished h2-jdbc which extends JDBC protocols for the H2 Database to return Java 8 objects. Similar to clj-time.jdbc, only specific for H2 and java.time. This is the result of a discussion in #clojure in which I stumbled over the whole TIMESTAMP WITH TIME ZONE data type in H2 returning an org.h2.api.TimestampWithTimeZone object. I went through all other H2 data types and coerced them to java.time objects 🙂 @seancorfield suggested I’d publish this as a library (so here it is!) and helped out with a few questions (thanks!) You probably already have a half-baked implementation of this in your codebase if you’re using H2 and java.time objects in Java 8. Check it out: https://github.com/olieidel/h2-jdbc#2018-10-1511:45belucidJust launched our full-stack Clojure OSS & SaaS product! https://carrot.io/ It's a leadership communication platform for better transparency and alignment. Especially great for growing and remote teams. ClojureScript/React/Rum front-end and Clojure microservices in back. All the code repos are here: https://github.com/open-company#2018-10-1512:03martinklepschGood luck with the launch Sean!#2018-10-1512:16belucidThanks so much Martin! Really appreciate it. Congrats on all the high profile Clojure work you're doing. I can't go anywhere in the community w/o your contributions, and speaking videos popping up. It's awesome.#2018-10-1514:18ccannthis looks super useful!#2018-10-1515:34belucidThanks @U0BAS2E13 I hope it is. Ping me any time here if you have any questions about it or feedback. Would love to chat with you about what problems you have in this area. Martin K. worked with us on it for a few months too.#2018-10-1518:04zaneOh, I saw this on Product Hunt. Didn't realize it was built using Clojure. Nice work.#2018-10-1611:29belucidThanks @U050CT4HR! It's not why we do it, but it nice that Carrot shows that full-stack Clojure can really work well for a startup. And the code is available to anyone to see how it was done.#2018-10-1714:07vemvHow come all/most code is open source? Wouldn't you be afraid of e.g. an enterprise client deciding to host its own instance?#2018-10-1511:46belucidPing me if anyone has any questions about it! We're also on ProductHunt today and I appreciate any upvotes from fellow Clojure devs.#2018-10-1516:41andy.fingerhutA transcript of Alex Miller's talk "Dependency Heaven", about tools.deps motivation and design choices, is available here: https://github.com/matthiasn/talk-transcripts/blob/master/Miller_Alex/DependencyHeaven.md#2018-10-1519:15Alex Miller (Clojure team)Thanks! While a lot of the conceptual stuff is good, this was about 4 months before the official release and some of the deps.edn details changed afterwards. So - watch out!#2018-10-1519:29devthYetibot 0.4.50 is out! https://yetibot.com/ - new pirate feature to translate text to pirate speak by @jereme - upgraded yetibot-dashboard dep with improved History view (see https://public.yetibot.com for a publicly-available example)#2018-10-1519:30devthhere's a fun usage example of pirate:
!twitter show boredelonmusk | random | pirate | meme elon:
#2018-10-1519:30devthYetibot output#2018-10-1615:12wilkerlucio[nubank/workspaces "1.0.0-preview9"] is out, this release makes workspaces tolerant to errors in cards, now when some error happens it's contained at the card level and workspaces keeps running#2018-10-1701:25souenzzoA small lib that generates a query from a pattern https://github.com/souenzzo/eav-pull#2018-10-1705:58fmjreyThanks! What's the main intent, is it to simplify querying, or to help with dynamic queries, e.g. resolving graphql queries?#2018-10-1712:44souenzzoIn my "framework" after pull data from db, i turn all maps into E A V then put it in a #clara engine that generate new facts, then build again in into maps So this simplify my work. I think that it can evolve to talk with client side db like #datascript or #fulcro#2018-10-1712:28practicalli-johnClojure beats Kotlin, Groovy, Scala in this survey for principal JVM language https://snyk.io/blog/jvm-ecosystem-report-2018#2018-10-1713:03cvic😉 https://clojurians.slack.com/archives/C03S1KBA2/p1539777166000100#2018-10-1713:13eggsyntax"8 in 10 use Java 8 in production" is higher than I'd expected.#2018-10-1713:21miro@U077BEWNQ also higher than I expected but for me it is reassuring that I am not the only one who sticks with 8... somehow 9&10 did not bring enough to make me upgrade yet. Modules in 9 were major disappointment for me. In 10 I like graal but imho it will need some time to mature.#2018-10-1713:22eggsyntaxYeah, post-8 releases have been a bit underwhelming.#2018-10-1714:20orestisFor anyone wondering, ~10000 participants. So 3% = 300 Clojure users filled this in.#2018-10-1714:17martinklepschFor anyone who still wants to use clj-http-lite I put up a fork and did some housekeeping (CI setup, Java 10 compatibility): https://github.com/martinklepsch/clj-http-lite — available as
[org.martinklepsch/clj-http-lite "0.4.1"]
#2018-10-1714:35taylorthanks for this! I used the original for a GraalVM native image recently — I'll try it again with this version#2018-10-1715:49souenzzoI love this "zero" deps rewrites 🙂#2018-10-1722:04tony.kayFulcro Developer’s Guide has a new security chapter describing steps for securing both normal and websocket-based networking. http://book.fulcrologic.com/#Security#2018-10-1811:24delaguardoI made a PR for cheshire library to add ability to skip parts of a json by using path-predicate option. It also add parsed-seq-strict public function to retrieve arrays from the huge json lazily. For anyone who want to test it - it is available as [org.clojars.dlg/cheshire "5.8.2-SNAPSHOT"] https://github.com/dakrone/cheshire/pull/135 - there is a PR
;; tl;dr
(parse-string "{\"foo\": {\"bar\": 2, \"buz\": 4}, \"oof\": 3}" true nil (fn [path] (re-matches #"(foo|oof)(bar)?" (apply str path))))
;; => {:foo {:bar 2} :oof 3}
#2018-10-1813:36blueberryhttps://dragan.rocks/articles/18/Patreon-Announcement-Adopt-a-Function#2018-10-1813:57polymerisLike amazonica but for ClojureScript (and a bit less ambitious): https://github.com/polymeris/cljs-aws Early development, feedback very welcome.#2018-10-1822:39patFressian for clojurescript & WebAssembly https://github.com/pkpkpk/fress#2018-10-1920:44danielcomptonClojurists Together is funding @tonsky for Datascript and @plexus for Kaocha this quarter: https://www.clojuriststogether.org/news/q4-2018-funding-announcement/#2018-10-2015:24renewdoit Releasing fun-map 0.3, with concurrent accessing support (with manifold), spec instrument (with clojure >= 1.9 ) and more flexible syntax for fw macro.#2018-10-2015:25renewdoithttps://github.com/robertluo/fun-map#2018-10-2120:47ikitommi[metosin/spec-tools "0.8.0"] is out! New spec walker, enhanced spec parser, new coercion utility and swagger improvements. The key feature is new st/coerce (inspired by spec-coerce), which uses spec transformers and the spec walker to best-effort coerce values to conform to (a set of simple) specs without a need to wrap the specs. st/decode uses now both coercion and conforming behind the hoods to supports all specs. Looking forward to CLJ-2251 for making things clean. https://github.com/metosin/spec-tools#2018-10-2121:46vemvOut of curiosity, when will compojure-api use this new version?#2018-10-2206:10ikitommi@U45T93RA6 hopefully later today#2018-10-2217:51dcjthank you for st/coerce, presumably I can now switch from spec-coerce!#2018-10-2220:16ikitommi@U45T93RA6 updated: [metosin/compojure-api "2.0.0-alpha27"]#2018-10-2120:47ikitommi[metosin/reitit "0.2.4"] is out too! Reitit is a fast data-driven router for Clojure(Script) supporting browser apps, ring, pedestal, pluggable async, schema, specs, swagger & interceptors. The new version uses the latest spec-tools to bring more robust spec coercion for all routing apps. Example app: https://github.com/metosin/reitit/tree/master/examples/http-swagger https://github.com/metosin/reitit#2018-10-2220:09blueberryhttps://dragan.rocks/articles/18/Ditching-Slack-Opening-Place-Personal-Interaction#2018-10-2220:20blueberryOr: Why I'm ditching Slack Clojurians and opening a new place for more personalized interaction for Uncomplicate and other Clojure topics#2018-10-2220:26martinklepsch@U086AG324 do you know about @logbog and https://clojurians-log.clojureverse.org?#2018-10-2220:27blueberryyes, and I addressed in the text that it is only a smaller part of my being fed up with Slack.#2018-10-2220:30martinklepschOk just wanted to make sure 🙂 Good luck with Discord 🙂#2018-10-2221:11seancorfieldAny and all follow-up should go to #community-development -- thank you!#2018-10-2312:21cvicI remember there's also a Mattermost instance#2018-10-2412:57blueberryhttps://dragan.rocks/articles/18/Clojure-and-OpenCL-in-Action-GPU-Computing-Book-1#2018-10-2508:47val_waeselynckReleasing d2q, a simple, efficient, generally applicable engine for implementing graph-pulling API servers in Clojure. Feedback wanted! https://groups.google.com/forum/#!topic/clojure/ENWeSJeAJOA.#2018-10-2513:56fmnoiseMeet flow - declarative errors handling without monads https://github.com/dawcs/flow#2018-10-2514:16lukas.rychteckyI did similar thing with monads 😄 https://github.com/druids/rop#2018-10-2518:33caioreleasing tank, a simple library for some common fault tolerance patterns (very early release, feedback is more than welcome!): https://github.com/caioaao/tank#2018-10-2715:43blueberryhttps://dragan.rocks/articles/18/Programmers-Teach-Yourself-Foundations-of-ML-AI-With-These-X-Books#2018-10-3003:38souenzzoUse io.pedestal.test/response-for as a com.wsscode.pathom.diplomat.http/driver #pathom https://github.com/souenzzo/pathom-pedestal-driver#2018-10-3015:01plexusNew free Lambda Island episode! https://lambdaisland.com/episodes/a-la-carte-polymorphism-1 (this one covers pretty basic stuff, part 2 will get into the more advanced stuff)#2018-10-3015:35Shantanu KumarI just released Promenade 0.7.0 (elegant error handling and control flow) to Clojars, with support for early termination and more: https://github.com/kumarshantanu/promenade#2018-10-3017:39plexusAnnouncing lambdaisland/deep-diff, a mini-lib for diffing data structures and printing the result#2018-10-3017:39plexushttps://github.com/lambdaisland/deep-diff#2018-10-3017:40plexus#2018-10-3019:38schmeenice, this could not have been announced at a more opportune time for me, was just looking around for a diffing library! 😄#2018-10-3019:39schmeesmall feature suggestion: it would be nice to have a way to only print the diffs, and skip all the parts that match 🙂#2018-10-3019:41schmeeman this is great, thanks so much for this! :sports_medal:#2018-10-3019:59plexus@U3L6TFEJF you could take the output of diff and filter it before passing it to pretty-print#2018-10-3020:01schmeeyeah, I can work some Specter magic for that, but still would be nice as a built-in IMO, makes the differences more immediate when diffing large data structures#2018-10-3020:43tristefigureMade a (dirty) fork of humane-test-output to use deep-diff instead of clojure.data/diff. To install locally (via lein localrepo):
### In the terminal
cd /tmp
git clone 
#2018-10-3020:49tristefigurePR: https://github.com/pjstadig/humane-test-output/pull/34#2018-10-3101:15Vincent Cantin@U07FP7QJ0 I heard about this diff project (https://github.com/juji-io/editscript) that is more recent than the one you use (https://github.com/droitfintech/clj-diff), maybe worth giving it a try.#2018-10-3021:06vigilancetechbasic "hello world" example for shadow + hoplon + electron (w/reload) (w/rock solid cider nrepl connection): https://github.com/vigilancetech-com/shadow-hoplon-electron#2018-10-3115:09blueberryhttps://dragan.rocks/articles/18/Easy-Probability-Clojure-1-The-South-Park-Socks-Drawer#2018-11-0120:24deliciousowlAre the answers programmatically generated in the web page itself? Saw a few errors earlier for a second or two 🙂#2018-11-0116:51practicalli-johnA beginners study group is starting 3rd November via the MeetAMentor community, following this basic study plan https://practicalli.github.io/clojure/study-guide.html Its free to join and all content will be shared publically. Sign up to the MeetAMenter study groups via http://bcrw.typeform.com/to/VkChxI The first hangout for the study group will be 11am-12noon (UTC, GMT timezone) on Saturday 3rd November https://youtu.be/MZcuL4lRw5E#2018-11-0201:42nathanmarzSpecter 1.1.2 released https://github.com/nathanmarz/specter/blob/master/CHANGES.md#2018-11-0216:57plexushttps://lambdaisland.com/blog/2018-11-02-test-wars-new-hope#2018-11-0420:13blueberryhttps://dragan.rocks/articles/18/Code-Mesh-LDN-Presentation-Interactive-GPU-Programming#2018-11-0500:58razum2umJust realised, that we need to push people towards better ideas, so added a new section to awesome-clojure list named awesome datastructures and put it before web-frameworks 😉 please PR more, if I didn’t mention: https://github.com/razum2um/awesome-clojure/blob/master/README.md#advanced-datastructures#2018-11-0514:51plexusnice! I didn't know about awesome-clojure, very nice collection you got there. I was clicking around a bit and it seems the link to 'lucid.unit' is broken#2018-11-0502:05mikethompsonThere's a new re-com release. https://github.com/Day8/re-com/releases/tag/2.2.0#2018-11-0506:10tony.kayFulcro incubator 0.0.12 is on clojars, and it just launched state machine support! This is a seriously good addition to Fulcro, and you should check it out. https://github.com/fulcrologic/fulcro-incubator/blob/master/state-machine-docs.adoc#2018-11-0516:37johnBrilliant!#2018-11-0517:20schmeeAnnouncing https://github.com/schmee/java-http-clj, a lightweight Clojure wrapper for java.net.http with HTTP/2, async requests and an idiomatic API#2018-11-0518:15rymndhnghttps://rymndhng.github.io/2018/11/05/effective-repl-driven-clojure/ I wrote something up about REPL-driven development, inspired by stu's talk: https://www.youtube.com/watch?v=Qx0-pViyIDU#2018-11-0613:58Alex Miller (Clojure team)Clojure 1.10.0-beta5 is now available https://groups.google.com/d/msg/clojure/pKYOHu99Rmg/JO5r-zooAgAJ#2018-11-0623:18danielcomptonClojurists Together is holding elections for committee members this month. Please consider standing, or encouraging someone else to stand for election: https://www.clojuriststogether.org/news/2018-committee-nominations/#2018-11-0808:30olieidelI just released hcloud, an API client for the Hetzner Cloud API. Quick context, what is Hetzner? It’s basically DigitalOcean but cheaper and a German company. I’m not sponsored by them but have hosted all my past projects there and was quite happy - and guess what, there wasn’t a Clojure client for their API yet. Side note: I also did some toying around with metadata to auto-generate docs which are included in the README.md. Probably not that impressive but I thought it was quite neat. Check out dev/readme.clj for the code. https://github.com/olieidel/hcloud#2018-11-0811:39jerger_at_ddayour lib is comparable to hetzners terraform provider?#2018-11-0811:41roklenarcicYou can replace :headers {"Authorization" (str "Bearer " token)} in http-opts with :oauth-token token.#2018-11-0812:53olieidel@jerger_at_dda yeah I suppose it’s comparable, only completely in Clojure. so if you want to “roll your own” creation / management of hetzner servers in Clojure, this is for you 😄#2018-11-0812:55olieidel@U66G3SGP5 wow, that’s a great find, I didn’t know that was equivalent. thanks for looking through the code btw! will change. relevant source of clj-http for those interested: https://github.com/dakrone/clj-http/blob/eee52198d7776e3e6d965fbade9296918efc8cca/src/clj_http/client.clj#L846#2018-11-0812:57roklenarcicHehe I spent a lot of time looking that source, since I've been making a lot of clients and my own rest client library#2018-11-0813:00olieidelhehe, I have a feeling that your clients are more well-designed than mine - I don’t have much experience writing them in Clojure#2018-11-0819:20roklenarcicNot really, your client looks fine and clean. Not to toot my own horn, but here's my lib for generating request maps: https://github.com/RokLenarcic/clj-rest-client#2018-11-0819:21roklenarcicI am happy to get any feedback#2018-11-0812:53olieidel@jerger_at_dda yeah I suppose it’s comparable, only completely in Clojure. so if you want to “roll your own” creation / management of hetzner servers in Clojure, this is for you 😄#2018-11-1017:09tony.kayFulcro Incubator 0.0.15 is on clojars. This release includes a much more feature-complete state machine system for Fulcro UIs including better abstraction support for loads, mutations, timeouts, network abort, and an alternate notation notation that allows for easy conversion to diagrams. https://github.com/fulcrologic/fulcro-incubator.#2018-11-1208:26val_waeselynckNew article: https://vvvvalvalval.github.io/posts/2018-11-12-datomic-event-sourcing-without-the-hassle.html, featuring: • an analysis of the limitations of conventional Event Sourcing implementations • how Datomic addresses them Feedback welcome as always! Follow up in #datomic please.#2018-11-1211:33mirohi guys, I have just released titanoboa - https://github.com/mikub/titanoboa It is a workflow orchestration platform for JVM entirely written in clojure. It also comes with a reagent GUI (which I have not OSSed yet). Best place to start would be probably to look at its wiki - https://github.com/mikub/titanoboa/wiki/Getting-Started-with-GUI#2018-11-1300:00tony.kaySmall bump to Fulcro Incubator: 0.0.16. Fixed accidental inclusion of sources twice, which was causing misbehavior with REPLs and IDEs.#2018-11-1411:16eval2020Introducing Clojurians-Zulipchat Details and rationale: https://clojureverse.org/t/introducing-clojurians-zulip/3173 Join us at http://clojurians.zulipchat.com/ !#2018-11-1415:00blueberryhttps://dragan.rocks/articles/18/Neanderthal-vs-ND4J-vol5#2018-11-1508:42plexusIntroducing kaocha-cucumber, test your Clojure code with Cucumber https://github.com/lambdaisland/kaocha-cucumber 🥒#2018-11-1508:43danielcomptonClojurists Together candidates for elections have been announced: https://www.clojuriststogether.org/news/2018-committee-candidate-announcement/. If you're a Clojurists Together member, watch your email for your ballot.#2018-11-1513:26amarjeet@U051KLSJF The post says “Each company and developer member gets one vote.” - Does it mean individual contributing members are not eligible?#2018-11-1517:14danielcomptonSorry, it just means everyone gets a vote#2018-11-1517:14danielcomptonI’ll clarify that#2018-11-1517:16amarjeetokay, great. thanks 🙂#2018-11-1511:30lispycloudsReleased clj-docker-client an idiomatic docker client for Clojure: https://github.com/lispyclouds/clj-docker-client This is a work in progress and is was started primarily to help me out in my various projects. Its far from complete but aims to be fully compliant with Docker. Please raise any issues for feature requests and feedback is most welcome. Hope this is useful to the community. 😄#2018-11-1511:39alanThis is really cool! I was thinking how to add a helper module to my clj-boost library for making deployment of models easier and this looks like the way to go!#2018-11-1511:42lispycloudsReally glad this is useful. Do let me know for any feature requests 😀#2018-11-1512:28nhaI like the idea - I was shelling stuff to the docker cli before to do that. maybe these guys would be interested too https://github.com/Quantisan/docker-clojure/pull/56#2018-11-1513:07lispycloudsAwesome! ive dropped a message there.#2018-11-1602:18rutledgepaulvVodori released [com.vodori/reactors "0.1.0"]. It’s our take on a reactive store (events/reducers/subscribers) atop clojure agents with event producers and subscribers expressed as core.async channels. We use it with database change streams as our producers and websockets as our subscribers to provide live collaboration between users annotating files. https://github.com/vodori/reactors#2018-11-1615:02martinklepschcljdoc cljdoc, the website for Clojure and ClojureScript library documentation is now working great on mobile! 📱 - 🎥 There's a video demo here: https://giant.gfycat.com/CostlyLittleAracari.mp4 - 🐦 And a tweet to share if you want to help spread the word: https://twitter.com/martinklepsch/status/1063443343089242112 - 📄 Also, if you're a library author, give cljdoc a try: https://github.com/cljdoc/cljdoc/blob/master/doc/userguide/for-library-authors.adoc And join us in #cljdoc 👋#2018-11-1615:17Vincent CantinMaybe unrelated: I tried to browse this page and found out that I cannot scroll down the page. Do other people encounter the same issue? https://cljdoc.org/d/integrant/integrant/0.8.0-alpha2/doc/readme#2018-11-1615:17martinklepsch@U8MJBRSR5 on mobile?#2018-11-1615:18Vincent CantinFirefox, MacOSX#2018-11-1615:20martinklepschdamn, can reproduce#2018-11-1615:20martinklepschThanks!#2018-11-1615:51martinklepsch@U8MJBRSR5 should be fixed now#2018-11-1615:52Vincent CantinI confirm that it works now.#2018-11-1615:52martinklepschGreat brushes sweat of forehead#2018-11-1620:07Alex Miller (Clojure team)Clojure 1.10.0-beta6 is now available https://groups.google.com/d/msg/clojure/oruh1-G7ujc/gSy9uKqGAAAJ#2018-11-1921:49Alex Miller (Clojure team)Clojure 1.10.0-beta7 is now available https://groups.google.com/forum/#!topic/clojure/2KrPBXYlzeA#2018-11-1921:50Alex Miller (Clojure team)We expect to proceed soon to release candidates again, so testing welcome!#2018-11-2022:10aviMy test suite ran normally, no issues. (Uses spec and test.check among other things.)#2018-11-2022:34Alex Miller (Clojure team)thx!#2018-11-2022:34avimy pleasure!#2018-11-2000:06curlyfryI just released https://clj-templates.com/, a webapp for easily finding Clojure templates for Leiningen and Boot#2018-11-2008:12miikkaDoo 0.1.11 is now available. It comes with preliminary Lumo and Planck support and some small improvements. https://github.com/bensu/doo/blob/master/CHANGELOG.md#0111---2018-11-20#2018-11-2115:28Alex Miller (Clojure team)Clojure 1.10.0-beta8 is now available https://groups.google.com/d/msg/clojure/2GQQpxNcDlM/9o_dpUaqAgAJ#2018-11-2115:51blueberryhttps://dragan.rocks/articles/18/CUDA-10-in-Clojure#2018-11-2219:47schmeejava-http-clj 0.4.0 has been released! contains a brand new WebSocket API and much improved documentation: https://github.com/schmee/java-http-clj#2018-11-2221:09nwjsmithThis library looks great, keep at it!#2018-11-2411:15vijaykiran4th Edition of FREE Dutch Clojure Day will happen on April 6th 2019, in Amsterdam - Checkout our website http://clojuredays.org Our CFP is now OPEN - https://www.papercall.io/dcd19 And we are looking for sponsors - if you are interested in supporting a community-driven non-profit conference, please get in touch 🙂#2018-11-2419:49wilkerlucioI'm please to announce [com.wsscode/pathom "2.2.0"] is out! Here are the highlights of this version: https://github.com/wilkerlucio/pathom * A guide to leverage the new features is provided at the book (no breaking changes from 2.1.0, you can update the library and upgrade the details when it's convient for you): https://wilkerlucio.github.io/pathom/#_2_2_0_upgrade_guide * Parallel parser with automatic coordination using connect, I updated the docs prividing information about how it works, you can find at: https://wilkerlucio.github.io/pathom/#_code_pc_parallel_reader_code * Tracer feature that will replace the old profiler, the profiler before could only measure the times of reads, the tracer is more dynamic, event based tracing for the parser, it can annotate any sug-segments * New format to define resolvers/mutations that are pure data (just maps), this new method facilitates the use of shared resolvers/mutations, example libraries coming soon! https://wilkerlucio.github.io/pathom/#_resolver_data_format * All the book examples were updated to use the new map format an encourage it, and there are new sections for parallel parser and other sections got updated * Alias support to rename keys on the output: * The book examples now use the Query Editor from Pathom Viz, so you can get auto-complete and tracing features as you try to book! (try it out, its pretty cool, try the parallel parser demo example: https://wilkerlucio.github.io/pathom/#_code_pc_parallel_reader_code) You can find the full change list at https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2018-11-2522:04wilkerlucio[nubank/workspaces "1.0.1"] is out! This release brings more stability and makes easier to new users to find the features. The spotlight search now uses a better algorithm with score to classify the results. The menu got some design changes and now we include some action buttons to open spotlight, see help and toggle index visibility. You can find the change details at: https://github.com/nubank/workspaces/blob/master/CHANGELOG.md#2018-11-2600:38danielcomptonI've been thinking for a long time and wishing for an opinionated Clojure code formatter. I've started a thread on ClojureVerse with my ideas on building such a tool with the community. I'm interested in other people's thoughts, particularly people involved in tooling. If you think this is a good idea or a bad idea, please let me know on the forums! https://clojureverse.org/t/clj-commons-building-a-standard-code-formatter/3240#2018-11-2601:21vemvIMO: A standard, automatedly-appliable config would be undoubtedly useful, but creating inflexible software is nothing to be proud about. Particularly given Lisp heritage gofmt is cool until you realise a few rules make no sense to you, and trying to fight them would be an uphill battle Rubocop is a better inspiration: has lots of rules, most of them auto-fixable, but nothing prevents you from deviating from them. And the defaults are still massively popular#2018-11-2614:06Philip Hale@U45T93RA6 have you had any experience with prettier in JS?#2018-11-2615:03vemvonly tangentially, it was a Prettier + TSLint combo#2018-11-2615:04vemv(I liked the latter, much similar to Rubocop. configurable, it can autofix things to be in styles A or B. e.g. always-semicolon, never-semicolon)#2018-11-2615:19guillaumeprettier is a time saver when sharing code with others. no more arguing about whitespaces and indentation. I think clojure would benefit from such a tool. Sometimes it’s hard to standardize across environments and different editors.#2018-11-2615:23vemvbut you can also can skip arguing with a configurable tool. I specifically recall using Rubocop with a disagreed config in a larger team, but I was like "whatever, I'll code as usual and run the pre-commit hook autoformatter"#2018-11-2622:27danielcomptonThere is now #formatting for more discussion about this#2018-11-2615:10plexusVideo+transcript of a talk I did last month for the Denver Clojure meetup about clojure.zip https://lambdaisland.com/blog/2018-11-26-art-tree-shaping-clojure-zip#2018-11-2700:03Alex Miller (Clojure team)Clojure 1.10.0-RC2 is now available (just changelog updates, otherwise same as -beta8)#2018-11-2701:56rutledgepaulvJust released [com.vodori/missing "0.1.4"]. It adds a function I’m calling collate and a whole bunch of basic graph functions that operate on graphs represented by a plain adjacency map. Collate can be used to create a lookup table from pairs of functions and collections where the function provides the “primary key” for each item in the corresponding collection. It’s passingly similar to clojure.set/join except it keeps related elements separate and colocated rather than merging them together (and so makes no requirement of their data type). https://github.com/vodori/missing#2018-11-2718:18mkvlrWe've improved our Clojure/Script support on Nextjournal and would love to get feedback from fellow Clojurists who'd like to join our private beta! https://twitter.com/usenextjournal/status/1067481738841153536#2018-11-2718:19mkvlr@kommen's Datomic article is a nice and easy way to play with Datomic and MusicBrainz in your browser: https://nextjournal.com/kommen/datomic#2018-11-2817:41miroHi guys! New release of titanoboa is out: https://github.com/mikub/titanoboa Mainly documentation updates and improved support for java (notes on java interop are here: https://github.com/mikub/titanoboa#-developing-custom-workflow-steps-in-java ).#2018-11-2902:48tony.kayhttps://github.com/fulcrologic/fulcro-incubator Fulcro Incubator’s state machines now support triggering events on other machines from within a handler. This allows for cooperating state machines in the UI.#2018-11-2911:15phoenixjj@miro - Is it BPM standard compliant ?#2018-11-2911:22plexushi @UBU0HGKHP, it's recommended to keep question/discussion out of #announcements. You can use a thread, or switch to a topic-specific channel.#2018-11-2911:27phoenixjjOops. My bad. Will keep in mind next time.#2018-11-2911:32mirohi @UBU0HGKHP, atm it is not. Though potentially I may be looking into converting to/from BPMN in future if there is any demand for it. I made deliberately this decision as with titanoboa I was trying to keep the definitions of workflows more succinct - so e.g. in titanoboa every step (aka activity in BPMN) is also treated as a gateway as you can define which steps to trigger afterwards based on some conditions. On the level of each step you can also define that if more than one of its gateway conditions are fulfilled that all the following activities will be run in parallel. Then you can at some point define steps that will join the parallel threads of the workflow together etc.#2018-11-2911:34miroalso - as opposed to full blown BPM systems - I am currently using titanoboa mainly for system integration workflows, so it is not (yet) built for workflows that involve human interaction#2018-11-2911:35phoenixjjok cool.#2018-11-2915:57jerger_at_ddaJust released https://github.com/DomainDrivenArchitecture/dda-managed-ide#2018-11-2915:59jerger_at_ddaWe now support installation & configuration of many devops tools like aws-amicleaner, terraform, packer, aws-cli & simple credentials config, dda-cloudspec, mfa tool & much more#2018-11-2922:45danielcomptonClojurists Together has held our first election for people to serve on the committee. The members of Clojurists Together have elected Nola Stowe, Fumiko Hanreich, and Laurens Van Houtven! https://www.clojuriststogether.org/news/2018-committee-election-results/#2018-11-2923:02jsa-aerialHanami 0.4.0 https://github.com/jsa-aerial/hanami and Saite 0.2.0 https://github.com/jsa-aerial/saite released. Updated to latest Vega, Vega-Light and changes to activate latest Vega-Embed capabilities. The major change for this release are full 'picture frames' for visualizations https://github.com/jsa-aerial/hanami#picture-frames. Previously, on the top quadrant was supported. Still a lot of documentation needed for Hanami, but coming along!#2018-11-3000:38eval2020First release of deps-try: Quickly try out dependencies on rebel-readline.
$ clojure -A:deps-try clj-time
[Rebel readline] Type :repl/help for online help info
Loading dependency clj-time RELEASE
[deps-try] Dependencies loaded.
user=> 
https://gitlab.com/eval/deps-try/tree/master#deps-try
#2018-11-3009:11plexus> I have java10 installed which apparently doesn’t have javax.xml.bind.DatatypeConverter (quote @dcreno) Since this is an issue people keep running into it's good to know that you can solve this by adding an external dependency, [javax.xml.bind/jaxb-api "2.3.1"]. This also fixes this issue for Java 9 (so no need for --add-modules) and works on older javas as well.#2018-11-3009:38martinklepschIn my experience it's often only javax.xml.bind.DatatypeConverter/printBase64Binary that is used which can also be replaced with
(.encodeToString (java.util.Base64/getEncoder) ~unencoded)
Of course Arne's approach may be more suitable in situations where the code cannot be changed easily.
#2018-11-3009:43plexusIf it's your own code then you probably know how to fix this, but there's quite a bit of libraries out there that use these classes but don't declare the dependency. Note that ClojureScript used to be in this category, but has removed its use of java.xml.bind in recent versions.#2018-11-3009:44martinklepschCould you share which library used the xml.bind stuff so I can take a look and maybe open a PR?#2018-11-3012:09David RenoI hit it trying to run ‘cljr-add-project-dependency’#2018-11-3023:18tony.kayFulcro 2.6.17 Released on clojars. This is a minor bug fix release that corrects a bug that could lose the “trailing frame” on refreshes when they come too rapidly.#2018-12-0119:14gnlThe lean and mean (and modular) Ghostwheel 0.3.1 is out with proper Clojure support, half the number of dependencies, easier configuration, composability with other defn-like macros, better error messages, and a ton of improvements around checking and reporting. Get it, break it, open issues so we can fix it. 🙂 https://github.com/gnl/ghostwheel/blob/master/CHANGELOG.md#031--2018-12-01 P.S. Thanks @tony.kay and @claudiu for some very valuable pre-release feedback.#2018-12-0120:18gnlHelp build a collection of quality function specs for clojure.core and third-party libraries: https://github.com/gnl/ghostwheel.specs#2018-12-0310:20rborertentacles 0.6.3 has been released on clojars (https://github.com/clj-commons/tentacles): - Add :bearer-token option in make-request (#12) - Bump clj-http to 3.9.1 & cheshire to 5.8.1#2018-12-0311:24alanNew clj-boost release -> Now with better docs (https://cljdoc.org/d/clj-boost/clj-boost/0.0.3/doc/readme) and a full tutorial (https://www.rdisorder.eu/2018/12/03/machine-learning-clojure-xgboost/) that's going to work even for Clojure newcomers! https://gitlab.com/alanmarazzi/clj-boost#2018-12-0312:08Alan GhelardiHey everyone. I'd like to announce Emidje: https://github.com/nubank/emidje, an Emacs minor mode that improves the integration between Cider and Midje. In fact, Emidje was strongly inspired on cider-test and provides a set of keybindings to interact with Midje facts in a more pleasant way inside of Emacs. It was built on top of nREPL and serves as a client for midje-nrepl: https://github.com/nubank/midje-nrepl. The Emidje's readme has a comprehensive (hopefully) list of features. Comments, suggestions and criticizes are always appreciated. Thank you.#2018-12-0316:23Alex Miller (Clojure team)Clojure 1.10.0-RC3 is now available https://groups.google.com/forum/#!msg/clojure/oeodsqbyo84/zCuWhTR0BAAJ - please give it a try now and provide feedback in #clojure or in jira so we could move to a final release!#2018-12-0316:29mpenetName change appreciated, thanks. It's clear now#2018-12-0319:08kulminaatorgave my db replication tool the bump to 1.10.0-RC3 as a try , tests still fly. i don't use a whole lot of features though, just the basic clojure itself + data.json + java.jdbc#2018-12-0320:46leonoelcloroutine v1 is out https://github.com/leonoel/cloroutine design notes and follow up https://clojureverse.org/t/cloroutine-v1/3300#2018-12-0416:05Alex Miller (Clojure team)Per https://github.com/cognitect-labs/REBL-distro/issues/1#issuecomment-444150162, “We’ve added language to the EULA to allow Datomic customers to use REBL at work, and have set up a Patreon membership so non-customers can do the same!” https://www.patreon.com/cognitect#2018-12-0416:24shaun-mahoodProbably a minor clarification - if I have Datomic cloud set up but all instances off, is there a threshold of when I go from being a paying Datomic cloud customer to not?#2018-12-0416:28Alex Miller (Clojure team)a totally non-official answer: if you are paying money for Datomic in a given month, you are a customer, and if not, you should use Patreon#2018-12-0416:26dpsutton$3 a month. what a deal#2018-12-0416:26dpsuttonunless you have datomic in which case you are good to go#2018-12-0416:27eggsyntaxReminder that discussion should go either in a thread, or in another channel. Thanks!#2018-12-0422:05hlshipcom.walmartlabs/schematic 1.2.0 Schematic is a Clojure library which aids in assembling Component systems from configuration data. * Expects components to implement the Component/Lifecycle protocol * Prefers pure data for declaring dependencies * Provides a simple mechanism for assembling/starting just a subset of Components * Avoids the pattern of passing a large bag of config data through down through levels of Component creation functions https://github.com/walmartlabs/schematic New in release 1.2.0: - Utilities to transform the configuration before assembling the system map - Improvements to errors related to unknown component references - Allows for Java objects as components#2018-12-0615:15JakubClosh, unix shell based on Clojure, gets a new release. It adds JVM support and rebel-readline integration which brings syntax highlighting and better tab completion. https://www.reddit.com/r/closh/comments/a3or89/closh_v03_released/#2018-12-0617:27eccentric JTo use as a shell would I add closh to my .zshrc?#2018-12-0620:47JakubI've added a special header to the jar, so it can be used as an executable now. You can then use chsh to use it as a default shell. Be careful to try closh first to make sure it works on your machine so that you don't get locked out from the shell. To make it as default you would do following (afterwards log out and log back for changes to take effect):
chmod +x /path/to/closh-zero.jar
echo /path/to/closh-zero.jar | sudo tee -a /etc/shells
chsh -s /path/to/closh-zero.jar
#2018-12-0620:52eccentric JGood point on testing it. Thanks!#2018-12-0802:19bpiel@U70QD18NP closh-zero.jar is great! thanks!#2018-12-0619:04seancorfieldworldsingles/ws-commons "0.1.1" https://github.com/worldsingles/commons useful little "extensions" to Clojure -- this contains our condp->, condp->>, and condq macros (variants of cond->, cond->>, and condp) and flip etc, which I have been hoping to open source for ages -- any and all follow-up should go to #clojure or DM.#2018-12-0705:07tony.kayFulcro 2.6.18 is on Clojars , and the Developer’s Guide has been updated. This new release has: - Added a number of missing SVG tags are to the DOM ns - Created an improved macro for defrouter called defsc-router. It generates the same thing as defrouter (which still exists and is supported), BUT it has defsc syntax for better IDE integration, and more importantly allows you to do things like define react lifecycle methods on the router itself. This means you can add things like “route change” hooks into the router on :componentDidUpdate and such. NOTE: Fulcro Incubator has a more powerful UI router, but this makes the built-in one more usable as well. https://github.com/fulcrologic/fulcro http://book.fulcrologic.com#2018-12-0709:45practicalli-johnClojureX 2019 conference in London, United Kingdom early bird tickets are available until the end of today (7th). Please see the #events channel for details. We are also looking for a content team to select speakers for the conference.#2018-12-0714:49Alex Miller (Clojure team)Clojure 1.10.0-RC4 is now available - please test before we do a final release! https://groups.google.com/d/msg/clojure/qCthZGzuMrE/7_e5n6SWBwAJ#2018-12-0716:17Adam HelinsFor Kafka user, have a look at this lib. AFAIK, it is the only clj lib offering full support for Kafka Streams ! https://github.com/dvlopt/kafka.clj#2018-12-0716:27gklijsNice might give it a spin on some even sourcing demo project. Was created almost a year ago, and found a few libraries, but all outdated, so did it with some java interop.#2018-12-0716:29Adam HelinsYes, Kafka is a good fit for clj and it deserves a good lib. This one pretty much offers feature parity with the java libs. I have been working on this for the past year. I am quite pleased with the API and its documentation and am now looking for more feedback.#2018-12-0716:32gklijsI have't looked, so it might be in there, but can you supply a function to determine the key based in the value? It might be to specific but was one thing I liked about my small wrapper. Also I build some stuff to go from a specific kind of eden schema's to avro schema's, also putting them into the schema registry.#2018-12-0716:37Adam HelinsWhere would you like to supply such a fn ? When sending a record ?#2018-12-0717:42gklijsNo, when creating the producer.#2018-12-0719:47kidpolloCheckout https://github.com/FundingCircle/jackdaw/ https://www.youtube.com/watch?v=eJFBbwCB6v4&amp;list=PLZdCLR02grLpMkEBXT22FTaJYxB92i3V3&amp;index=5#2018-12-0720:19ccannopen to PRs on Gregor https://github.com/ccann/gregor#2018-12-1109:01Adam Helins@U26FJ5FDM Indeed I think this is too specific. I don't want to create another type on top of the java producer, it is cleaner that way.#2018-12-1113:22gklijsNot as an object, I would more think of it as a 'key-strategy' witch defaults to no keys. If you do have a key-strategy, and you call produce with one argument the key strategy/function is used.#2018-12-0813:33rickmoynihanhttps://github.com/RickMoynihan/nrebl.middleware#2018-12-0911:15Yehonathan SharvitANN the Klipse REPL: a beginner friendly REPL http://blog.klipse.tech/clojure/2018/12/09/easy-clojure.html https://github.com/viebel/klipse-repl#2018-12-1019:32andy.fingerhutA transcript of Rich Hickey's recent talk "Maybe Not" from Clojure/Conj 2018 is available here: https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/MaybeNot.md Many of his talks have transcripts in the same directory, linked here: https://github.com/matthiasn/talk-transcripts/tree/master/Hickey_Rich#2018-12-1022:25andy.fingerhutAnd another talk transcript, this one from Evan Czaplicki, the creator of the Elm programming language, on "The Hard Parts of Open Source": https://github.com/matthiasn/talk-transcripts/blob/master/Czaplicki_Evan/TheHardPartsOfOpenSource.md#2018-12-1102:57yogthosOur local user group in Toronto is organizing [a conference next April](http://clojurenorth.com/). We're aiming for around 200 seats, and here's a link to the [CFP](https://clojurenorth.typeform.com/to/YuveUZ).#2018-12-1121:58Alex Miller (Clojure team)Clojure 1.10.0-RC5 is now available…#2018-12-1220:55mandersonJust released lein-git-down: https://github.com/reifyhealth/lein-git-down, a Leiningen plugin for resolving dependencies from Git as a Maven repository. Supports transitive dependencies of projects that have a project.clj, pom.xml, or deps.edn. Usage and Rationale in the README.#2018-12-1316:50timgilbertAlso in build-tooling related news, we've just released garamond, a tools.deps-based utility which manages versions via git tags and also post-processes clojure-generated pom.xml to include versions, groupIds, and a few other bits of helpful metadata. Follow-ups in #tools-deps please. https://github.com/workframers/garamond#2018-12-1320:16johndispacio is an experimental, simple, predicate stack dispatch system. Predicates are tested in the order they are defined and the first truthy match wins. Features being worked on: - similar interface to defmethod - isa? hierarchies, similar to defmethod - prefer a la prefer-method - dispatch on arbitrary functions or specs, datomic/datalog queries, core.match, etc. - extend functions to data types, rather than data types to functions - small, simple, cljc codebase See the examples in the readme: https://github.com/johnmn3/dispacio This is an very alpha release - expect changes. If you see anything unexpected, please open an issue.#2018-12-1411:40martinklepschVery happy to announce that you can now use cljdoc as a documentation source in the documentation browsing app Dash (Mac only): https://clojureverse.org/t/dash-app-now-supports-cljdoc/3365 — demo video: https://www.youtube.com/watch?v=bnHBwi8Ygd0#2018-12-1416:49vaer-kLooks like linux users can enjoy this on Zeal: https://zealdocs.org/#2018-12-1416:50vaer-kAnd other platforms: https://blog.kapeli.com/dash-for-ios-android-windows-or-linux#2018-12-1417:09martinklepschHave you tried this? I think at this point there’s more work required to make this work with Zeal - see recent conversations in #cljdoc #2018-12-1418:28zaneThis is so exciting! I've been eagerly awaiting this. Thank you for your hard work.#2018-12-1419:21martinklepsch@U050CT4HR thanks for coming by to say this; feedback like this means a lot 😊❤️#2018-12-1419:22martinklepschLet me know if you run into any issues #2018-12-1518:33NickSuper cool. Thanks @U050TNB9F! Hopefully this will keep all my doc lookups to dash instead of dozens of chrome tabs.#2018-12-1712:48bruno.bonacci[ANN] [amalloy/ring-buffer "1.3.0"] Hi, a new version of amalloy/ring-buffer (1.3.0) is available on Clojars (https://clojars.org/amalloy/ring-buffer/versions/1.3.0) with the following changes: - amalloy/ring-buffer github project is now transferred to clj-commons/ring-buffer (https://github.com/clj-commons/ring-buffer) - Fixed incompatibility with Java11 (https://github.com/clj-commons/ring-buffer/pull/11) - added nth indexing for random access lookups (https://github.com/clj-commons/ring-buffer/pull/9), credit: Pedro Martins - @pjago please note that: CLJ Commons is a community-led project to build up the supporting infrastructure around Clojure to make it a better experience for people new to Clojure, as well as existing Clojurists, like maintaining open-source projects that, for any reason, the author cannot maintain, check https://clj-commons.org/. bye, Bruno#2018-12-1717:25Alex Miller (Clojure team)Clojure 1.10 has been released! https://clojure.org/news/2018/12/17/clojure110#2018-12-1718:04miikkaGreat! There were no changes after 1.10.0-RC5, right?#2018-12-1718:05eval2020https://clojurians.slack.com/archives/C03S1KBA2/p1545067907549300#2018-12-1722:33aviThank you Alex for all your hard work in shepherding this release!#2018-12-1801:39jimmyGreat work Clojure team. #2018-12-1901:43bbrinckI’ve just released Expound 0.7.2 - Support for changes in spec 0.2.176 and Clojurescript 1.10.439 - Bug fixes, notably for specs like keys* and which used conform - New cljdoc docs https://cljdoc.org/d/expound/expound/0.7.2/doc/readme Please feel free to ask questions in #expound#2018-12-1908:12Yehonathan SharvitAnother Klipse blog post: Clojure 10 features with interactive code snippsets https://twitter.com/viebel/status/1075299680844693504#2018-12-2005:21shaun-mahoodhttps://mobile.twitter.com/ArcadiaTechInc/status/1075447922781798404#2018-12-2005:22shaun-mahood(I’m not involved at all with the project, just think it’s pretty awesome) #2018-12-2005:59anirudhWe have released sentry-clj.async, a library that enables async push of events to sentry. We will love your feedback and contribution https://clojars.org/tech.gojek/sentry-clj.async
#2018-12-2109:00plexusThe Heart of Clojure Call for Speakers is now OPEN. Heart of Clojure is a new Clojure conference coming to Belgium next August, with the aim to bring together the European community. (questions and follow-up in #events please) https://mailchi.mp/53e19cc20b4b/call-for-speakers-is-now-open#2018-12-2514:05mogenslundLiquid 1.0.0 has been released. Fully functional core. Clojure 1.10 as default. https://github.com/mogenslund/liquid#2018-12-2515:33Vincent CantinNice work#2018-12-2515:39mogenslundThank you 🙂#2018-12-2519:24jsa-aerialNice - what would be the issues to surmount to get this working in ClojureScript?#2018-12-2521:02mogenslundI actually did some experiments with Liquid to figure out how it would work using ClojureScript. I did not do much else than remove some JVM specific code and some IO. It is very experimental!! The project is here https://github.com/mogenslund/liquidjs Eval does not always work, functionality is lacking and performance is not snappy! It can be executed in a browser or through lumo. Some time ago I deployed the experiment here as well: http://salza.dk/liq/#2018-12-2522:00jsa-aerialGreat! Thanks, I'll take a look!#2019-01-0311:09Saikyunwow amazing! I've often thought about making something like this, so I'll definitely try it out#2018-12-2515:33Yehonathan SharvitLazy sequences are not compatible with dynamic scope: https://blog.klipse.tech/clojure/2018/12/25/dynamic-scope-clojure.html#2018-12-2520:20vemv🙂 also explained in https://stuartsierra.com/2013/03/29/perils-of-dynamic-scope#2019-12-3019:56Yehonathan SharvitThanks for mentioning this article. It’s a really good one#2018-12-2705:38ahungryI just put up a new blog post (writing a FUSE + REST api integration in Clojure to show REST API results in a local FS): http://ahungry.com/blog/2018-12-26-Clojure-is-Capable.html#2018-12-2705:53rutledgepaulvHad no idea writing a fuse implementation was relatively straightforward. Now I’m wondering what other things I could represent as file systems…#2018-12-2713:09ahungryI think it makes a great bridge / abstraction over more complicated data protocols like networking and such. You could even provide a fuse system to micro service users instead of an sdk for instance , and let them interact with records via their language of choice, even if it didn't support networking #2018-12-2721:48kwladykaI am asking for feedback I made a library to validate form inputs in CLJS with spec and fn. https://github.com/kwladyka/form-validator-cljs I would love to know if you will use it and get constructive feedback on #clojurescript channel!#2018-12-2722:08seancorfieldChlorine 0.0.6 is available -- a Clojure(Script) plugin for Atom, that works with a Socket REPL -- https://atom.io/packages/chlorine -- all follow-up to (I'm not the creator but I am an active user and recently blogged about my switch to Chlorine from ProtoREPL http://corfield.org/blog/2018/12/19/atom-chlorine/ )#2018-12-2821:55jerger_at_ddacooooool ... in our next release of https://github.com/DomainDrivenArchitecture/dda-managed-ide I will add a atom-chlorine setup as alternative to atom-protorepl 🙂 Which other atom plugins are u using for your clojure development?#2018-12-2903:10dima_condur#chlorine I gave a try to Chlorine 0.0.4 then 0.0.5 then 0.0.6 and still getting errors when trying to refresh the namespaces.#2018-12-2903:11dima_condur#chlorine
Failed to refresh
{:ex #error {:via [{:type clojure.lang.Compiler$CompilerException, :message "Syntax error compiling var at (unrepl-reader-703:3:117).", :data {:clojure.error/phase :compile-syntax-check, :clojure.error/line 3, :clojure.error/column 117, :clojure.error/source "unrepl-reader-703", :clojure.error/symbol var}, :at [clojure.lang.Compiler analyzeSeq "Compiler.java" 7114]} {:type java.lang.RuntimeException, :message "Unable to resolve var: clojure.test/*load-tests* in this context", :at [clojure.lang.Util runtimeException "Util.java" 221]}], :trace [[clojure.lang.Util runtimeException "Util.java" 221] [clojure.lang.Compiler$TheVarExpr$Parser parse "Compiler.java" 720] [clojure.lang.Compiler analyzeSeq "Compiler.java" 7106] [clojure.lang.Compiler analyze "Compiler.java" 6789] [clojure.lang.Compiler analyze "Compiler.java" 6745] [clojure.lang.Compiler$InvokeExpr parse "Compiler.java" 3888] [clojure.lang.Compiler analyzeSeq "Compiler.java" 7108] [clojure.lang.Compiler analyze {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__1284)}] {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__1285)}], {:repl-tooling/... nil} {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__1286)}}, {:repl-tooling/... nil} {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__1287)}}
#2018-12-2903:24seancorfield@U3K24G7C5 Turn off that option. I have the "simple" (just :reload) option selected and have it set to not refresh on save.#2018-12-2903:24seancorfieldI've always found auto-refreshing in editors to be a giant pain and I always turn it off.#2018-12-2903:25seancorfieldAnd please take this to #chlorine -- as requested in the announcement!#2018-12-2903:58dima_condurThanks @U04V70XH6 I will try the “simple” reload option#2018-12-2723:38AdaśPublishing a Clojure getting started type article/tutorial soon. I take a pretty unusual approach. It's windows focused so would especially appreciate windows users trying it. All feedback appreciated, thank you! https://github.com/adasomg/the-missing-clojure-intro#2018-12-2817:32AdaśPublished on http://dev.to. Thanks for the feedback on github and couple of stars.#2018-12-2805:54tony.kayFulcro 2.6.19 is on Clojars. Adds support for the new getDerivedStateFromError lifecycle method.#2018-12-2814:43jerger_at_ddaWe just released dda-serverspec. It comes with a new test for checking routes on servers: https://github.com/DomainDrivenArchitecture/dda-serverspec-crate#2018-12-2815:17eccentric J📚 Book Report 0.1.0 Released! Turn your Clojure files into structured, interactive notebooks. Aims to make learning from books easier. https://github.com/jayzawrotny/book-report#2018-12-2815:25cjsauerReally cool! Thanks for sharing.#2018-12-2815:33eccentric JThanks!#2018-12-2818:31jerger_at_ddaWe just released dda-managed-vm. Now redshift is included in our vm installation. https://github.com/DomainDrivenArchitecture/dda-managed-vm#2019-12-3000:52mauricio.szaboJust published a new version of Chlorine, atom package to work with Clojure over Socket REPL. In this version, some improvements, bugfixes, and a great problem that we had with lots of println errors that could break the plug-in: https://atom.io/packages/chlorine Discussions on #chlorine channel!#2019-12-3016:00ikitommi[metosin/reitit 0.2.10] is out! Reitit is a fast data-driven router for Clojure(Script). What’s new: * small - enhancements to the core routing * new fast :quarantine-router for route trees with conflicts * pedestal support via optional reitit-pedestal module: https://metosin.github.io/reitit/http/pedestal.html * polished ring request & interceptor context diff loggers: https://metosin.github.io/reitit/http/transforming_interceptor_chain.html#printing-context-diffs * initial support for http-reitit Interceptors on ClojureScript, thanks to the latest Sieppari. Changelog: https://github.com/metosin/reitit/blob/master/CHANGELOG.md#0210-2018-12-30 Big thanks to all the contributors. #reitit for chatting.#2019-01-0110:24bozhidarHey everyone! Happy New Year! Live long, live well, have fun and prosper! To help you start the New Year on the right foot and with the proper mood I’ve just cut CIDER 0.19! The release notes are here https://github.com/clojure-emacs/cider/releases/tag/v0.19.0 The highlights are: * lots of improvements to the new connection management system * some fixes for the changes to the error messages in Clojure 1.10 That’s going to be the final CIDER release that will work with the legacy tools.nrepl, so if you’re a boot or lein user you should definitely upgrade to their latest versions which target the modern nREPL. Cheers!#2019-01-0117:47wilkerlucioHello everybody and happy new year! I like to announce I'm launching the first draft for the EQL language specification/documentation. EQL is a Clojure (EDN) based query languages; it compares to GraphQL in sets of features to request structured information, but uses only EDN data structures to describe the requests. The first draft I'm leaving an open PR on Github, so you have the chance to comment and improve it before getting into master. EQL is intended to be a general syntax that can be used by multiple projects on the Clojure community; it's currently used on Om.next, Fulcro, and Pathom. If you like to give your input to it, please check the PR at https://github.com/edn-query-language/eql/pull/1/files#2019-01-0222:30seancorfieldhttps://github.com/clojure-expectations/clojure-test [expectations/clojure-test "1.0.1"] -- clojure.test for Expectations : A clojure.test-compatible version of the classic Expectations testing library. All follow-up to #expectations (for anyone who was following the 2.2.0 development of Expectations, this is the fourth version of that piece of work, now split into its own library -- and used by all our tests at World Singles Networks!)#2019-01-0415:20yogthosWe've started announcing talks that have been accepted, so far we have confirmed [Mike Fikes delving into the ClojureScript compiler with his "Expedience via Inference" talk](https://twitter.com/clojurenorth/status/1080937757646696453) and [Tommi Reiman from Metosin with "Reitit, the Ancient Art of Routing"](https://twitter.com/clojurenorth/status/1080578609641938947). Stay tuned for more announcements as we select more talks this month.#2019-01-0415:33eggsyntaxI've wished so many times that markdown worked in slack... Awesome talks!#2019-01-0519:20yogthosyeah I know, I always forget that it's only partially supported 🙂#2019-01-0820:31danielcomptonOddly, Markdown links are supported if you post via the Slack API#2019-01-0922:42yogthosslack works in mysterious ways ¯\(ツ)/¯#2019-01-0506:29Shantanu KumarHappy new year, everyone! I would like to announce Calfpath - a fast and flexible Ring based routing library: https://github.com/kumarshantanu/calfpath for the JVM. Clojure ML post: https://groups.google.com/forum/#!topic/clojure/iBH84dYY49E Follow up chat in #bract please.#2019-01-0510:07Adam HelinsHere is a fun but serious library for handling GPIO on a Linux system in a standard way (eg. Raspbian on the Raspberry Pi) : https://github.com/dvlopt/linux.gpio.clj#2019-01-0611:06val_waeselynckscope-capture-nrepl 0.3.0 is out, updates the nREPL dependency to use nrepl/nrepl. Still compatible with the older tools.nrepl. Thanks @rickmoynihan! https://clojars.org/vvvvalvalval/scope-capture-nrepl#2019-01-0611:41rickmoynihanwhat were your thoughts on the other PR? https://github.com/vvvvalvalval/scope-capture-nrepl/pull/6#2019-01-0612:37val_waeselynck@rickmoynihan already commented on the issue - I'll probably submit a variant of the PR making this behaviour optional, but your PR has had the benefit of prompting me to work on this 🙂#2019-01-0614:46rickmoynihanahh thanks… I’d missed that 🙂#2019-01-0714:59Alex Miller (Clojure team)Please share your thoughts in the annual State of Clojure survey! https://clojure.org/news/2019/01/07/clojure-2019-survey#2019-01-0715:24Vincent CantinFilled up already. Thank you for asking us about Clojure!#2019-01-0718:43hlshipcom.walmartlabs/lacinia 0.31.0 and com.walmartlabs/lacinia-pedestal 0.11.0 Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Featured changes in 0.31.0: - Limited support for custom directives - Ability for field resolvers to provide extensions or warnings along with/instead of a value - BREAKING CHANGES to simplify/improve custom scalars - Fixed nils getting promoted into empty lists - Fix compatibility with Clojure 1.8 and with JDK 11 lacinia-pedestal provides the Pedestal support to expose web endpoints backed by Lacinia's GraphQL. GitHub repo: https://github.com/walmartlabs/lacinia-pedestal Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/ Featured changes in 0.11.0: - Update to GraphiQL 0.12.0 - Fix Clojure 1.8 compatibility#2019-01-0810:38Adam HelinsUpdated to Kafka 2.1 https://github.com/dvlopt/kafka.clj#2019-01-0812:57roostaHello all, I'd like to announce Herb, a CSS styling library for ClojureScript that focuses on component level styling using functions: https://github.com/roosta/herb#2019-01-0813:27wilkerlucioEQL specification is out! It still a work in progress, next steps will document how to use the specs to validate and generate queries, also more docs for the core api. http://edn-query-language.org#2019-01-0815:01Ivanthanks, that's really interesting#2019-01-0822:50jsa-aerialHi everyone, announcing version 0.5.1 of Hanami https://github.com/jsa-aerial/hanami, the go to lib/(optional) framework for developing your Vega/Vega-Lite powered domain specific visualization applications. This version provides support for chartless/empty picture frames enabling full hiccup/re-com enabled text based areas. These can be used in tab layouts just like frameless charts/plots/layouts and those with standard picture frames. All can be mixed together in a given tab 'page'. New file based data sources covering clj, edn, json, and csv. This supplements the previous values, url, and named channel data sources. Stronger and more general support for application specific routes and landing pages. New template support for tree layouts - the first of several new network/graph layouts to come. New (experimental) template for overview+detail.#2019-01-0822:51jsa-aerialAlso pleased to announce version 0.3.2 of Saite https://github.com/jsa-aerial/saite. Saite started out as a fairly simple exploratory graphics and visualization application (built on Hanami) but now is evolving toward a new highly capable notebook. This version provides several cool new capabilities, including CodeMirror editors for JS/JSON and Clj, bidirectional conversions, quick modal panel popup renderings, and all the new stuff from Hanami. Also, there are a number of issues concerning this evolution towards being a full notebook, that I'd appreciate feedback on. Or feel free to open new issues if you have other thoughts or 'want to haves' you would like to record.#2019-01-0920:04Alex Miller (Clojure team)It would be great to have your input on the 2019 Clojure Survey! https://www.surveymonkey.com/r/clojure2019 If you’ve already completed it, please forward it on to appropriate internal company chatrooms or your local meetup mailing list! Thanks!#2019-01-1007:04danielcomptonClojurists Together is an organisation dedicated to funding and supporting open source software, infrastructure, and documentation that is important to the Clojure and ClojureScript community. In the last 12 months we've funded improvements to DataScript, Kaocha, cljdoc, Shadow CLJS, CIDER, ClojureScript, clj-http, and Figwheel. We've just finished surveying our members on what they see as important for our next funding round. The main things people were interested in: developer experience tools (55%), build tooling (52%), documentation (49%), error messages (44%), IDE support (35%), test tooling (30%), linters (30%), and data analysis/processing frameworks (26%). Specific projects mentioned were CIDER, Clojure.spec, Re-frame, REPLs, Leiningen, Hiccup, Reagent, Aleph, Re-natal, Figwheel, LightTable, and Datahike. If you maintain a Clojure project, especially one in the areas of focus, or a named project, please consider applying for funding. You can apply at https://www.clojuriststogether.org/open-source/. Applications close on 15th Jan, Midnight PST, and the Q1 funding round goes from February 1 - April 31. If you'd like help preparing an application, or have any more questions, you can contact me or any of the team (https://www.clojuriststogether.org/team/).#2019-01-1008:33pezWhat are developer experience tools?#2019-01-1014:17eggsyntaxHi! Reminder that follow up discussion to posts in #announcements should either go in a thread or in another channel. Thanks!#2019-01-1008:44robert-stuttaford@pez figwheel, cider, etc#2019-01-1008:48pezThanks. Figwheel fits the description for me, but I think of cider as IDE support.#2019-01-1010:55jaihindhreddyIDEs themselves are DX tools aren't they? 😃#2019-01-1015:12pezIndeed, but they had their own category, so that's why I wondered. 😃#2019-01-1015:14rickmoynihannon mece categories! 😢#2019-01-1015:46pezHahaha!#2019-01-1015:47pezWikipedia: ”The MECE concept has been criticized for not being exhaustive, as it doesn't exclude superfluous/extraneous items.”#2019-01-1016:02rickmoynihanI think that criticism of MECE is bs though. To include other principles inside MECE itself seems hypocritical to me, i.e. the principle of minimality is superfluous and extraneous to the MECE property. Minimality of categories is certainly another principle you should apply to categorisations, but it feels like a category error to try and include all other principles inside this one. It’s kinda like trying to represent everything with a single mega-category “All Principles”.#2019-01-1016:09eboersmaNet Promoter Score, a pure clojure library for calculating NPS values has been released https://clojars.org/net_promoter_score#2019-01-1018:24dcjCool! Have you looked at kixi.stats? #data-science channel may also be interested.... https://github.com/MastodonC/kixi.stats#2019-01-1018:29eboersma@U07TTE6RH I haven't, thanks for the tip. This was mostly a learning exercise to put together something simple; I'm just getting started in the community, so I feel confident there's lots of stuff I've missed!#2019-01-1016:50borkdudeannounced it other places, but not here: https://github.com/borkdude/re-find, a library, CLI tool and website to find clojure.core functions (or any other function that has a spec)#2019-01-1117:08wilkerlucio[nubank/workspaces "1.0.3"] is out! This version adds a simpler setup configuration to use with #shadow-cljs, thanks @tony.kay for the implementation and @thheller for help tuning it up. More info https://github.com/nubank/workspaces#with-shadow-cljs#2019-01-1118:45royalaidThis makes my life so much better, thank you!#2019-01-1120:31WhoNeedszZzWaiting for Github Pages to be back up to see the example provided#2019-01-1122:13Alex Miller (Clojure team)My weekly Clojure journal about work in Clojure dev - http://insideclojure.org/2019/01/11/journal/#2019-01-1210:23schmeereally appreciate these journals, it’s great to get a look under the hood of what’s going on in the Clojure space! 🙂#2019-01-1521:36uwosame. thanks so much Alex!#2019-01-1201:54Shantanu KumarI'm pleased to announce Stringer library (v0.3.1) for faster string concatenation: https://github.com/kumarshantanu/stringer with included perf benchmarks. Mailing List announcement: https://groups.google.com/forum/#!topic/clojure/McmBZ3HStO8#2019-01-1323:17Noah BogartI found strdel a little hard to grok at first because I didn’t expect a join action to have a delete abbreviation#2019-01-1405:11Shantanu Kumar@UEENNMX0T The del in strdel is for "delimited", as in "delimited string".#2019-01-1405:11Shantanu KumarPerhaps I should have thought about strjoin or something similar.#2019-01-1417:15Noah BogartNo worries, I realized how you meant it after reading the examples, just caught me off guard. Thanks for the library! #2019-01-1217:26nilrecurring[dhall-clj "0.2.0"] is out! dhall-clj is a Dhall to Clojure compiler - you’ll want to use it to take advantage of Dhall in your Clojure programs. You can use Dhall as a sane, typed configuration language (instead of YAML/JSON/EDN), as a templating language (instead of e.g. Jinja) or as a safe and efficient protocol to send code on the wire (like Protobuf, but better!) More info and live demo for Dhall at https://dhall-lang.org More info and quickstart for dhall-clj at https://github.com/f-f/dhall-clj#2019-01-1218:26borkdude@nilrecurring Interesting! I was just thinking about Dhall today and if it could be useful in relation to Clojure#2019-01-1218:45nilrecurring(Let's move to a thread, as this channel is for announcements only)#2019-01-1218:48nilrecurringI agree! The endgame for Dhall is to eventually have an integration with all the languages. This Clojure compiler is the second fully compliant implementation (the first one is the reference implementation in Haskell, which also works in js), and a Python and a PureScript implementation are well underway#2019-01-1218:31borkdudenever actually tried it before#2019-01-1306:02matthiasaka is a command line tool for sharing and using clojure aliases: https://github.com/matthias-margush/aka#2019-01-1411:14borkdudeAwesome. A tap for cider-nrepl would be cool!#2019-01-1411:53practicalli-johnLondon (UK) Clojurians coding dojo on Tuesday evening this week. A chance to meet the community and see how friendly we all are. This event is at the new offices of Signal Media who are the hosts and sponsors for this evening. We get together and decide what exercises or technology to do that evening, then split into small groups and start learning together. The event is open to all levels and we ensure everyone has the support needed to be involved. https://www.meetup.com/London-Clojurians/events/wndklqyzcbsb/#2019-01-1422:03Vincent CantinIs it an event for kids or adults?#2019-01-1609:54practicalli-johnSorry, I missed your question. This event is for 18 years or older, unless accompanied by a parent or legal guardian.#2019-01-1419:46alanclj-boost 0.0.4 is out! There's a very important bug fix if you have a European (or any Locale with a comma decimal separator) and a new dmatrix identity method!!!! https://clojars.org/clj-boost#2019-01-1422:54jsa-aerialHanami 0.6.0 https://github.com/jsa-aerial/hanami is now available. Mostly a clean and refactor release. However, also resolves an issue with shadow-cljs - Thanks @pfeodrippe !#2019-01-1503:52temcoamazing#2019-01-1508:44bozhidarCIDER 0.20 (Oslo) is out https://metaredux.com/posts/2019/01/15/cider-oslo.html Enjoy!#2019-01-1514:41eccentric JAwesome work! Please get some rest 🙂#2019-01-1513:01Adam HelinsKafka client, new release supporting the creation of mock consumers and producers https://github.com/dvlopt/kafka.clj#2019-01-1522:00Shantanu KumarI'd like to announce BRACT: A data-driven application initialisation framework https://bract.github.io/ - the Clojure ML post is here: https://groups.google.com/forum/#!topic/clojure/zaWBclbVt6Y Follow up conversation in #bract please.#2019-01-1522:47tony.kayVersion 0.0.27 of Fulcro Incubator’s UI State Machines just got some additional helpers. https://github.com/fulcrologic/fulcro-incubator#2019-01-1611:06Vincent CantinCritical security update on Sente, maybe worth announcing here: https://github.com/ptaoussanis/sente/blob/master/CHANGELOG.md#v1140-rc2---2019-jan-12#2019-01-1614:54Alex Miller (Clojure team)Just a reminder that the State of Clojure 2019 survey is still underway - if you haven’t completed it yet, it takes about 5 minutes and would be great to have your feedback. https://www.surveymonkey.com/r/clojure2019#2019-01-1708:50Cam SaulHey everyone, if you're anything like me, it makes you happy when your code is pretty. And sorted ns declarations, with unused stuff removed, are the prettiest type of ns declarations. With that in mind I searched high and low for a linter that could help my pretty ns declarations stay pretty. Devastatingly, I could find nothing of the sort. The future seemed bleak. Little did I know the answer to my troubles was inside me all along. I opened up my REPL and before I knew it a brand new linter started coming together right before my very eyes. Behold: https://github.com/camsaul/lein-check-namespace-decls . Enjoy!#2019-01-1708:54vemvInteresting work! I'll keep an eye on it There's https://github.com/gfredericks/how-to-ns as well#2019-01-1708:56Cam SaulOh man, can't believe I couldn't find that one. Well, more linter options are always a good thing IMO#2019-01-1708:59vemvsure thing, it's valuable to have something that matches the nrepl tooling 🙂#2019-01-1716:02ccann
Clojure linter that checks that namespace declarations are cleaned the way `clj-refactor` would clean them. Leiningen plugin.
🙌 🙌
#2019-01-1716:04ccannmy non-emacs-using coworkers will be happy they can know what the actual rules are#2019-01-1716:24vemvMy only complaint about clj-refactor is that it can be wrap the ns form to 80 columns too agressively... with no possible fix afaict But I do appreciate from it that it actually can clean the ns form in ways that a static tool can't#2019-01-1719:43Cam Saul@U45T93RA6 internally refactor-nrepl (the Clojure middleware part of clj-refactor) prints namespaces with clojure.pprint/pprint, so you can configure that. I usually do something like this in one of my core namespaces to change the default printing width from 80 to 200:
(intern 'clojure.pprint '*print-right-margin* 200)
clj-refactor then won't wrap things unless they exceed 200 characters in width.
#2019-01-1719:45Cam SaulEither way the linter only checks that the namespace forms are = in the Clojure sense so you can make them wide or narrow as you want and the linter won't complain.#2019-01-1714:12miroHi guys, new release (0.7.3) of titanoboa is out. It now supports java 8-11 (so lots of javas then ) - the main improvement is that the new version can now load external maven dependencies during runtime even on java 9 and higher (that was a tough one, but it works now). https://github.com/mikub/titanoboa#2019-01-1718:21ikitommi[metosin/reitit "0.2.11"] is out! Reitit is a fast data-driven router for Clojure(Script) supporting browser-apps, ring, pedestal and sieppari. Notable changes: - segment-router is rewritten to use a custom Java-backed Segment Trie on the JVM, making it 2x faster in the benchmarks - linear-router is also backed by the the Segment Trie, making it 2-4 faster in the benchmarks - guide on how to use expound as spec-coercion error printer - FIX: route-data expansion can be extended https://cljdoc.org/d/metosin/reitit/0.2.11/doc/introduction#2019-01-1721:49tony.kayFulcro 2.8.0 is on Clojars. This new version adds “Pre-merge” support by @wilkerlucio. This feature allows you to augment how data merge works at the component level. https://github.com/fulcrologic/fulcro http://book.fulcrologic.com/#PreMerge#2019-01-1821:56Alex Miller (Clojure team)Just killing time before the end of the day? Why not fill out the State of Clojure 2019 survey? https://www.surveymonkey.com/r/clojure2019#2019-01-1913:57pezFor next year, maybe ask what news letters/podcasts/youtube channels people follow?#2019-01-1902:40Alex Miller (Clojure team)http://insideclojure.org/2019/01/18/journal/ - my journal for the week on spec and clojure.main errors#2019-01-2015:52yogthosLet us know what kinds of talks you'd like to see at Clojure/north this year https://clojurenorth.typeform.com/to/lW2F8M#2019-01-2114:22Alex Miller (Clojure team)If you haven’t completed the State of Clojure 2019 survey - tomorrow is the last day! https://www.surveymonkey.com/r/clojure2019#2019-01-2218:39noprompthttps://clojars.org/meander/alpha#2019-01-2322:52eggsyntax"Meander is a Clojure/ClojureScript data transformation library which combines higher order functional programming with concepts from term rewriting and logic programming. It does so with extensible syntactic pattern matching, syntactic pattern substitution, and a suite of combinators known as strategies that run the gamut from purely functional to purely declarative."#2019-01-2407:46jerger_at_ddaWe've released a new version of dda-serverspec. We've added support for checking network routes - thanks to @razum2um 🙂 More details are described in our blog: https://domaindrivenarchitecture.org/ Code&uberjar can be found on github: https://github.com/DomainDrivenArchitecture/dda-serverspec-crate#2019-01-2409:57Adam HelinsNew release of this fully featured up-to-date Kafka client. Now supports running a fake Kafka Streams runtime which doesn't need a running cluster. Idea for testing at the repl your KS apps written in clojure, or just learning the lib ! https://github.com/dvlopt/kafka.clj#2019-01-2412:19bpielhttps://stackoverflow.blog/2019/01/23/our-2019-developer-survey-is-open-to-coders-everywhere/#2019-01-2415:23shar1zhey there - we just open sourced a production library in Clojure for Aerospike for those interested : https://medium.com/appsflyer/clojure-and-aerospike-e2b9a9423f57#2019-01-2518:06val_waeselynckscope-capture-nrepl 0.3.1 released, prevents you from putting your REPL in an unusable state by inputting a non-existent Execution Point Id. https://github.com/vvvvalvalval/scope-capture-nrepl Thanks @rickmoynihan#2019-01-2521:52rickmoynihanThanks a million for this. I know it’s a small change, but it removes a frustratingly sharp edge from an otherwise fantastic tool.#2019-01-2723:11wilkerlucioEQL docs for clojure.spec are out! This explains how you can use clojure.spec to validate EQL syntax. I like to bring attention also to the generative docs, they explain how to generate queries at random and also how to customise the generators to constraint the generation to very specific needs, this can be an interesting read for anyone looking for examples on how to setup complex configurable generator setups, I hope you enjoy! https://github.com/edn-query-language/eql#clojure-specs#2019-01-2723:19eggsyntaxSummary for folks unfamiliar with EQL: "EQL is a declarative way to make hierarchical (and possibly nested) selections of information about data requirements.#2019-01-2816:57metasoarousHello everyone. I'm excited to announce the release of Oz 1.5.2. https://github.com/metasoarous/oz Oz is a simple Clojure & ClojureScript data visualization library built around Vega-Lite & Vega. In Vega-Lite & Vega, data visualizations are specified as pure data descriptions about how to map properties of your data and interactions to aesthetics of a visualization, and is thus an eminently Clojuresque approach to the art of data visualization Oz specifically comes with the following features: • REPL based workflow • Reagent components for dynamic web applications • Jupyter notebook support via the Clojupyter & IClojure kernels • Load markdown files, with a notation for embedding visualizations as code blocks • The ability to combine Vega-Lite & Vega with hiccup for creation of scientific documents • Export of visualizations and scientific documents to live/interactive html files via the export! function • A publish/sharing API which pushes visualizations or scientific documents (as pure data) to a GitHub gist, and prints out a url for loading them up from either the Vega Editor tool (https://vega.github.io/editor) or via http://ozviz.io (for Vega(-Lite) + hiccup documents) To learn more about Vega-Lite, Vega or Oz, please check out https://github.com/metasoarous/oz. Thanks for your time!#2019-01-2817:04asierHi all, our team has released several Duct modules today. https://github.com/magnetcoop/buddy-auth.jwt-oidc https://github.com/magnetcoop/object-storage.s3 https://github.com/magnetcoop/scheduling.twarc https://github.com/magnetcoop/secret-storage.aws-ssm-ps#2019-01-2817:05asierAnd also a library for encrypting and decrypting arbitrary Clojure values: https://github.com/magnetcoop/encryption#2019-01-2817:08victorbNot sure if it really fits here, please tell me if it doesn't. Recently started working on a new project called Cube. It's a ipfs / ipfs-cluster management application, entirely written in Clojure/Clojurescript, made for desktop/server deployment. It's still in it's early stages, but if you're interested in some open source Clojure applications together with distributed storage (and decentralization!), check it out! You can find it here: https://github.com/ipfs-shipyard/cube#2019-01-2819:57Alex Miller (Clojure team)InsideClojure journal 2019.4 - http://insideclojure.org/2019/01/28/journal/#2019-01-2905:11podviaznikovhey everyone! I've got access to GitHub actions feature and decided to created few actions useful for Clojure projects: - boot wrapper https://github.com/repetitive/actions/tree/master/boot - lein wrapper https://github.com/repetitive/actions/tree/master/boot - Clojure eval inside GitHub issue comments https://github.com/repetitive/actions/tree/master/clojure#2019-01-2909:06plexusI just released a new version of Kaocha, the all-in-one Clojure test runner. This is the most substantial release in a while, with improvements to the --watch mode, and several new plugins (hooks, system notifications, clojure/java version filter, dynamic bindings). Full CHANGELOG: https://cljdoc.org/d/lambdaisland/kaocha/0.0-389/doc/changelog . Many thanks to @rgm, @danielcompton, and @magnars#2019-01-2910:25jacekschaeThere is a new video course I’m working on! It opens tomorrow! https://www.learnreframe.com/#2019-01-2913:32athomasoriginalLooks great!#2019-01-2922:08WhoNeedszZzIt's cool that you're doing this, but something to note - your example code is not idiomatic. You don't have app-db initialized, where you would set the counter to 0 instead of using get-in, update-in, and fnil. I understand you may have done this just to shorten the code, but it is misleading.#2019-01-2922:09WhoNeedszZzIt would also be helpful to indicate that in a real re-frame app that code is not all in the same ns.#2019-01-3008:56jacekschaeThanks for your comments. I see you point. The JS part is also not idiomatic because it would be split to different files. But this still doesn’t change the fact that Clojure is very expressive and there is no other language that gives so much Bang! for a line of code. Take a look at this comparison https://medium.freecodecamp.org/a-real-world-comparison-of-front-end-frameworks-with-benchmarks-2018-update-e5760fb4a962.#2019-01-3008:57jacekschaePS. I hope you will sign up for the course and see that :> doesn’t behave the same as r/adapt-react-class in certain situations as per our discussion the other day 🙂#2019-01-3006:42plexusFor the next 24 hours all Lambda Island videos can be watched for free. Enjoy! https://lambdaisland.com/news/happy-birthday#2019-01-3015:29MattiasHey, grats and thanks for the gesture 🙂 I’m just getting into Clojure and happen to have a 6 hour train ride on Friday. Never used Vimeo before, is there any functionality to buffer/download videos for those disconnected moments? #2019-01-3015:47MattiasHmm. I realize now there’s a business model here, and so the question is most likely not relevant. I’m too old for these things. No offense meant 😅#2019-01-3107:02pezCongratulations and thank you! I managed to watch a few awesome vids. Your teaching is very effective. #2019-01-3108:57plexus@UCW3QKWKT download links are so far only available when you buy individual videos.#2019-01-3014:06mauricio.szaboJust published Chlorine v0.0.9 - socket REPL package for Atom editor. In this new version, a new way of parsing Java objects and classes using reflection: this should help users that have to do lots of interop with Java, and also fixes some problems when parsing bignumbers and bigdecimals; also, this works on Clojure 1.8.0, before the introduction of datafy, so if you're using an old Clojure version, this could be useful! One example of the visualization of Java objects is in this PR: https://github.com/mauricioszabo/atom-chlorine/pull/42.#2019-01-3014:06mauricio.szaboDiscussions on #chlorine channel 🙂#2019-01-3020:08borkdudehttps://github.com/borkdude/speculative-kaocha-plugin#2019-01-3020:12Christian Johansen👍#2019-01-3021:46hlshipio.aviso/pretty 0.1.37 https://github.com/AvisoNovate/pretty > Sometimes, neatness counts io.aviso/pretty is a library and Leiningen plugin that adds well formatted, readable output of Clojure exceptions. It's pretty indispensable to the tune of 1.9 million downloads, and is integrated into the Ultra plugin as well as Boot. This release is a cleanup, removing the totally unnecessary io.aviso.writer namespace, and switching the Leiningen plugin from relying on implicit middleware to explicit middleware.#2019-01-3112:37temcoI have added [io.aviso/pretty "0.1.37"] to the vectors of :plugins and :dependencies of the lein project.clj, just as shown in https://ioavisopretty.readthedocs.io/en/0.1.21/lein-plugin.html, but when I lein repl, the stack-trace doesn't be redirected. How can I make it? Thanks.#2019-01-3117:11hlshipThat's an outdated version of the docs, see https://ioavisopretty.readthedocs.io/en/latest/lein-plugin.html#2019-01-3117:11hlshipI'll go give http://ReadTheDocs.org a kick to make sure latest is latest!#2019-02-0105:00temcothanks, it works by adding /inject to :middleware#2019-02-0101:48wilkerlucio[com.wsscode/pathom "2.2.9"] is out! This version has some fixes we encountered recently to calculate paths on some complex situations (where it goes from one to many and back, hard to explain but better have it working properly). This also adds p/pre-process-plugin helper. Complete changelog: https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2019-02-0115:51blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-0-Why-Bother#2019-02-0210:49practicalli-johnI am running a study group via YouTube broadcasts, aimed at those still new to Clojure. Today at 11am (UTC, UK time) I am talking about sequences and discussing different ways to solve related 4Clojure exercises https://www.youtube.com/watch?v=vehRrNqgVbQ Thank you.#2019-02-0216:51Alex Miller (Clojure team)InsideClojure journal 2019.5 http://insideclojure.org/2019/02/02/journal/#2019-02-0315:51rutledgepaulvJust cut an initial release of a library that bundles some code I’ve found myself frequently recreating to connect core.async and jetty websockets. feedback welcome! https://github.com/RutledgePaulV/websocket-layer#2019-02-0321:21dchelimskycom.cognitect.aws/api-0.8.243 is released: https://groups.google.com/forum/#!topic/clojure/wzEy8tSSKF0#2019-02-0409:11eval2020A searchable archive of Slack-messages can now be found at Clojurians-Zulip: https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive If a channel is not listed, make sure to add user zulip-mirror-bot to it (ie /invite @zulip-mirror-bot). (For more information about Clojurians-Zulip and how it came to be: https://clojureverse.org/t/introducing-clojurians-zulip/3173 ). Follow up chat in #community-development please.#2019-02-0410:19alexyakushevclj-async-profiler 0.3.0 is out with many new goodies. Check out the detailed post about them here: http://clojure-goes-fast.com/blog/clj-async-profiler-tips/. The profiler itself: https://github.com/clojure-goes-fast/clj-async-profiler#2019-02-0411:04robert-stuttafordman i have been itching to play with this, thanks for the reminder!#2019-02-0412:54miroMaybe this might be of interest to somebody here - I wrote a short piece on visualizing complex workflows with D3 and Reagent : https://github.com/mikub/titanoboa/wiki/Visualizing-large-workflows-using-D3,-React-and-Clojurescript#2019-02-0418:15Yehonathan SharvitInteractive demo of Clojurescript 1.10.516 new features https://blog.klipse.tech/clojure/2019/02/04/clojuscript-1.10.516.html#2019-02-0418:30hlshipcom.walmartlabs/lacinia 0.32.0 Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Featured changes in 0.32.0: - added promote-nils-to-empty-list? compile option - deprecated com.walmartlabs.schema/coercion-failure, and allowed parse & serialized functions to throw an exception - fixed some GraphQL schema parsing errors#2019-02-0419:49Alex Miller (Clojure team)State of Clojure 2019 results https://clojure.org/news/2019/02/04/state-of-clojure-2019#2019-02-0520:58richiardiandreaAnnouncing unbroken-promises - two macros for testing js/Promises I hope you will find it as useful as we do here 😄 https://github.com/arichiardi/unbroken-promises#2019-02-0521:20jsa-aerialHey All, I'm pleased to announce Hanami 0.8.0 https://github.com/jsa-aerial/hanami, the go to lib/(optional) framework for developing your Vega/Vega-Lite powered domain specific visualization applications. This version involves some significant refactoring to make development of client only applications both simpler and easier. Client and server side support and APIs are now even more consistent and symmetric in capabilities and resources. Some new template and substitution key capabilities are also included. In addition there is also now callback support for picture frames.#2019-02-0521:20jsa-aerialThere is loads and loads of new documentation which now covers most aspects of developing and using server and client applications and also client only applications. There is also a new example client only application https://github.com/jsa-aerial/hanami/tree/master/examples/ClientOnly#2019-02-0521:22jsa-aerialBasic feature list • Application construction - Page headers with instrumentation - External instrumentation of visualizations (dropdowns, sliders, etc) - Full hiccup/re-com "picture framing" capability for visualizations - Shared session groups (named sessions) - Multiple sessions per application • Visualization abstraction - Parameterized templates with recursive transformations - Purely data driven - no objects, classes, methods, etc - Completely open ended - define your own - More general than an API while capable of arbitrary specific detail • Document structuring - Tabbing system for named visulization groupings - Multiple visulizations per tab body / grouping - Automatic grid layout - Custom bodies#2019-02-0613:56blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-1-Representing-Layers-and-Connections#2019-02-0616:10rickmoynihanhttps://github.com/RickMoynihan/redef-methods Not officially released yet — but open to feedback#2019-02-0620:32metasoarousHi everyone. Just want to announce a new release of Oz, your Simple (TM) Clojure & ClojureScript data visualization library, built on Vega-Lite & Vega. This release (version 1.5.5), is a minor release featuring: • A bug report and fix for those of you wanting to use Oz from the Clojure CLI, thanks to @viesti :man-bowing: (related to differences in class path resolution of resources) • Some documentation improvements, particularly as relates to Jupyter integration Thanks for your attention, and please let me know if you have any questions or feature requests!#2019-02-0622:07metasoarousForgot to post the link 🙂 https://github.com/metasoarous/oz#2019-02-0621:07lilactownToday I'm formally announcing a library I've been working on: hx. It is a simple, easy to use library for React development in ClojureScript. hx gives you an extremely thin-but-familiar interface to React. It includes an ergonomic Hiccup-like syntax (very similar to Reagent) and a couple of helper macros for defining React components. With the release of React Hooks, I see a library like hx as being very desirable for many projects so that we can continue to leverage modern React features like Hooks, Suspense, Concurrent mode, and improvements to SSR that are coming in the next year. Feedback, questions, issues, enhancements and help are all appreciated! Reach out to me here or via Github. https://github.com/Lokeh/hx#2019-02-0621:16eccentric JIs it able to support something like react-blessed?#2019-02-0621:19lilactownit is as close to raw React as you can get, so yes#2019-02-0621:19lilactownit doesn't reference any DOM APIs at all#2019-02-0621:22eccentric JGreat! Will have to try that out 😄#2019-02-0621:57pez@U1GCL8V2B will probably want you to support preact. 😃#2019-02-0621:59lilactownI think preact has a React compat API? if so, it would just need to be provided via the "react" moniker#2019-02-0622:01mseddonYeah. No change needed with preact-compat. We can plonk that into the webview as though react has been loaded from a cdn :D#2019-02-0622:03mseddonIf there is a change needed we can pr a compatability fix upstream. Developit is a pretty awesome guy :D#2019-02-0622:04mseddon(He even follows me on github 😂)#2019-02-0622:06lilactownawesome. yeah, IMO what makes using hx tenable is the new Hooks API. if/when Preact gets Hooks support, I definitely see hx + Preact working quite well#2019-02-0622:07mseddonOh! I haven't tried hx, I will have a look, thanks!#2019-02-0622:13mseddonYou can follow the implementation of hooks here btw: https://github.com/developit/preact/issues/1247#2019-02-0710:24danielnealdefinitely very interested in a thin layer to react, not had a chance to try hx out yet but will be first on my list#2019-02-0711:05borkdudeso, hx will create react components which then can be also leveraged from reagent?#2019-02-0711:06borkdudean example of that could be useful#2019-02-0715:50lilactownit would be like using any other React component, either with :> or the other interop options#2019-02-0715:50borkduderight, cool#2019-02-0622:07metasoarousForgot to post the link 🙂 https://github.com/metasoarous/oz#2019-02-0716:43dominicmhttps://juxt.pro/blog/posts/react-hooks-raw.html I wrote this today.#2019-02-0716:56jeff.terrellThis is great! Thanks for writing and sharing it. One thing looks wrong, though. You said, "React has been inspired by Redux." Maybe you meant that React.useReducer has been inspired by Redux? Or re-frame has been inspired by Redux? But I don't think React was inspired by Redux. simple_smile#2019-02-0717:04johnawesome. Does this change the equality/diffing performance characteristics?#2019-02-0717:20johnspecifically, when using the useLense idiom, to front useState... Is there a way to recover the performance benefits of using immutable clojure data that we get wrt using reagent/om?#2019-02-0717:29dominicm@U056QFNM5 that was supposed to be read as "The React team has been inspired by Redux in creating React.useReducer". I can see why it's not being read that way though. I think your wording is an improvement, I will change it 😄#2019-02-0717:31dominicmActually, that sentence is fairly doubling anyway, so I think I can just delete the "has been inspired by" anyway.#2019-02-0717:33dominicm@U050PJ2EU There is a useMemo which is fairly similar to the tool being used for swapping React's equality checking to rely on ClojureScript's instead of React's reference checking. I want to dig more into this though.#2019-02-0717:34dominicmhttps://reactjs.org/docs/hooks-faq.html#how-do-i-implement-shouldcomponentupdate aha, this pretty much confirms what I thought 😄#2019-02-0717:35dominicmwell, the React.memo things is new to me, so it seems like "yes, and more!" is the answer.#2019-02-0717:35dominicmuseMemo will allow you to get performance gains for local state.#2019-02-0718:30WhoNeedszZzInteresting write-up, but something really stuck out to me that I'm surprised nobody else mentioned. You stated, "In reframing the object oriented paradigm of React into a functional programming one, some complexities are introduced." React is not and never was object-oriented and has embraced the functional paradigm from the start, which is exactly what attracted me to React in the first place. You also said that ClojureScript libraries try very hard to avoid classes. This is not a ClojureScript mentality, but straight from React and in the documentation to only use classes when you need to. The whole idea is that stateless components should be pure, which originated from React directly. The ClojureScript wrappers have the ability to create classes for those alternate cases so I'm pretty confused by your statement.#2019-02-0718:41WhoNeedszZzAlso, as you mentioned in the post this is pretty much Redux, but built-in. It doesn't make it any less confusing on how to use it properly or avoid having to write custom reducers just to use it. I have thoroughly enjoyed re-frame's approach to this by using r/atoms and simply modify it directly and atomically. This basic and tedious procedure is not necessary with atoms.#2019-02-0719:18john@U09LZR36F Well, that's awesome news!#2019-02-0719:19johnThis could be a pretty good thing#2019-02-0719:21dominicmOverall react is very functional, but classes provide state. The stateless component stuff has gone through plenty of iterations, and historically was based around classes. The method of using functions for stateless components has struggled to gain traction due to the fear that eventually they will become classes later. The clojurescript wrappers usually fall into a couple of traps when wrapping react classes. The methods of accessing state are more obscure than those of react, and because we're in custom territory, we can't rely on as much of the documentation provided by react itself, you are obscured through layers. Reagent has 3 forms of component, react is pushing for hooks to be the primary component form, so that would be 1 form to achieve the same job. That's the kind of win I'm celebrating here. I don't think reagent could have taken a different path, I just think the new place we're in is better.#2019-02-0719:21john@U050B88UR dominicm is looking into reference equality for react hooks. Sweet thread above ^#2019-02-0719:23dominicmRegarding state, you're right. I expect a library to jump in and fulfil this need. I was trying to show the primitives that can be used. hx by @U4YGF4NGM has some hooks which are in this area, and I think they're really exciting.#2019-02-0719:26john@UAFT1B7Q8 React is not and never was object-oriented and has embraced the functional paradigm from the start, which is exactly what attracted me to React in the first place. @U09LZR36F was referring to the class-ful object-oriented-ness of react. They did buy into classes early in, which is a pain in the ass.#2019-02-0719:27lilactownReact is fairly object-oriented in its concept. The whole idea of a component instance is inherently object oriented#2019-02-0719:28lilactownthe tag-line v = f(state) idea is nicely functional, but the reality React is much more than that#2019-02-0719:28lilactowneven looking at reagent, no one would call that pure FP; you have all these implicit side effects happening in your functions!#2019-02-0719:29lilactownthe fact that you can use functions or classes is really just sugar#2019-02-0719:29johnyeah... But hooks are still somewhat in the same boat#2019-02-0719:29lilactowntotally agree.#2019-02-0719:29johnjust cleaner#2019-02-0719:32lilactownanyway, https://github.com/Lokeh/hx/ provides some custom hooks like <-state which returns an atom that will update your component on swap!/`reset!`, and <-deref which allows you to use global atoms similarly#2019-02-0719:35johnYeah, I'm pretty stoked about hx!#2019-02-0719:50WhoNeedszZz@U4YGF4NGM You're mixing up two different "object-oriented" meanings. Instances are not true object-orientation, but are what languages like Java call "object-oriented". Also, just because there are stateful components that does not make it object-oriented. As any functional language, library, or framework documentation will tell you, it's impossible to be 100% pure. That's just a reality due to the way the universe works and does not make it any less functional. The functional paradigm is an entire methodology and you're just looking at a part of an aspect of it.#2019-02-0719:52lilactownI think you might be thinking in the Java-ism that OOP = classes#2019-02-0719:53WhoNeedszZzI'm not talking about OOP at all. You guys brought that into the discussion#2019-02-0720:00lilactownah OK, above you were commenting on the use of OOP in the article so that's what I was replying to. I may be wrong, but I think of OOP as constructing an application out of a graph of state-ful things that talk to each other. in that way, I think that React is nicely OOP. but so are most Clojure applications, and any kind of complex system (see: "microservices"). The reason I like Clojure so much is because it doesn't balk at that fact. I agree with you that React itself has done an amazing job of embracing FP idioms and ergonomics in the small. But at some point in the large, you want something other than just functions and values I think 😅 which React provides as well. I think that many CLJS wrappers try and paper over this OO in the large that React provides (see: Quiescent) and run into issues because of it.#2019-02-0720:04lilactownat least now, React has a blessed way of eschewing classes with something a bit more formal than reagent's form-2/form-3 or rum's mixins.#2019-02-0720:15WhoNeedszZzSo Rich's infamous talk, "The Language of the System" is perfectly fitting for what I was responding to regarding OOP.#2019-02-0720:49metasoarousHello again; Just wanted to mention that @tothda found a bug using Oz from the IClojure docker image, due to JVM version issues with a dependency. This has now been fixed in [metasoarous/oz "1.5.6"]. Thanks again! https://github.com/metasoarous/oz#2019-02-0723:22borkdudeA new release (v0.0.3) of speculative, a collection of specs for the functions clojure.core. https://cljdoc.org/d/speculative/speculative/0.0.3/doc/readme Changes: https://github.com/borkdude/speculative/blob/master/CHANGELOG.md#003#2019-02-0809:42borkdudeThe speculative kaocha plugin is now available on clojars: https://clojars.org/speculative/kaocha-plugin#2019-02-0820:13dchelimsky[ANN] Cognitect Labs' aws-api 0.8.253 is now available! https://groups.google.com/forum/#!topic/clojure/T2DxXK8qTDU#2019-02-0909:09practicalli-johnClojure study group today at 11am UK time (UTC), covering functional composition and the comp function. https://www.youtube.com/watch?v=dhGAXISqra8#2019-02-1110:21blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-2-Bias-and-Activation-Function#2019-02-1319:03leonoelinjure, a dependency injector for clojure and clojurescript. https://github.com/leonoel/injure follow-up on clojureverse https://clojureverse.org/t/injure-v1/3768#2019-02-1322:03tony.kayFulcro Incubator 0.0.28 is up on Clojars. This version adds a few tweaks to the dynamic router and better support for load/remoting within UI state machines. https://github.com/fulcrologic/fulcro-incubator#2019-02-1410:58blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-3-Fully-Connected-Inference-Layers#2019-02-1504:29Alex Miller (Clojure team)hey all, not really an announcement but there have been at least 4 reports in different channels today of significant performance degradation on the latest Java 8 builds (u201 or 202) and Java 11 builds on both Linux and Mac. I am on the hunt for an easy repro case of the shape: 1) git clone FOO 2) run command BAR. If you have that, or have other relevant info, please drop it in #clojure-dev. Thanks!#2019-02-1511:58souenzzoI reported it some time ago in #off-topic It's something related to load many deps/namespaces ATM I'm just using a old version of java. 11.0.1 / 1.8.0_192#2019-02-1513:44Alex Miller (Clojure team)If it’s an older version, then I think it’s something different#2019-02-1517:15Lennart BuitAre you still looking for info on this? A coworker downgraded from java 8u202 to java 8u192 because of performance degradations on a Fulcro app. If you need more info I can try to persuade him some more to post ^^#2019-02-1517:27Alex Miller (Clojure team)no, I have enough info. am deep in analysis. thanks...#2019-02-1517:33Lennart BuitBest of luck then!#2019-02-1814:24souenzzo🙂 https://dev.clojure.org/jira/browse/CLJ-2484#2019-02-1906:11ltsampros'#2019-02-1801:46lincpaMarkdown Literary Programming that don't break the syntax of any programming language. https://clojureverse.org/t/idea-markdown-literary-programming-that-dont-break-the-syntax-of-any-programming-language/3788#2019-02-1815:10blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-4-Increasing-Performance-with-Batch-Processing#2019-02-1920:47Shantanu KumarI've released Promenade 0.7.1 (elegant error handling and more) to Clojars with a fix to allow recur at tail position: https://github.com/kumarshantanu/promenade#2019-02-2006:39Yehonathan SharvitAn interactive re-frame tutorial https://blog.klipse.tech/clojure/2019/02/17/reframe-tutorial.html#2019-02-2111:54vemvIt takes quite some head scratching to make the Reloaded workflow avoid a variety of pitfalls. I've observed that we Clojure programmers keep encountering these, so I decided to share some knowledge in this tiny repo: https://github.com/reducecombine/rehardened Maybe the single most valuable thing is the snippets, which I've improved continuously over the last months. PRs with further advice are absolutely welcome!#2019-02-2215:15rickmoynihanThis covers most cases I’ve seen… and hints at a few I haven’t… Is it possible to explain each and every important line in those snippets somewhere?#2019-02-2116:42blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-5-Sharing-Memory#2019-02-2119:04wilkerlucio[com.wsscode.pathom "2.2.10"] is out! This version adds supports for custom user context on connect mutations (more info: https://wilkerlucio.github.io/pathom/#_mutation_output_context). Also fixes issues with elide-not-found that was compromising fulcro tempids. Full change list https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2019-02-2119:42seancorfield{org.clojure/java.jdbc {:mvn/version "0.7.9"}} just landed in Maven Central. It contains a couple of tweaks around insert-multi! and highly experimental datafy/`nav` functionality (for Clojure 1.10). See https://github.com/clojure/java.jdbc/blob/master/CHANGES.md for more details. All follow-up to #sql please!#2019-02-2122:52tony.kayFulcro 2.8.2 on clojars. Minor bug fixes. See CHANGELOG for details. https://github.com/fulcrologic/fulcro/#2019-02-2314:13pachydermballetI need a dynamically sized collection of agents, but the size of that collection will be managed by another agent (changes to the size of the collection will be significantly less frequent than changes to the underlying agents). Is nesting agents in this case appropriate, or am I missing a better way to structure this?#2019-02-2314:29eggsyntaxHi! Will you please move your comment to #clojure? #announcements is reserved for announcements, and sends notifications to a huge number of people. No particular insight on your question, by the way, I haven't done much with agents.#2019-02-2314:38pachydermballetsorry - new to the slack client - didn't realise it was in the wrong forum#2019-02-2314:39eggsyntaxNo stress! Thanks for moving it :-)#2019-02-2418:15kwladykahttps://github.com/kwladyka/form-validator-cljs Library update. Added checkbox validation for checkbox which have value and which haven’t. For example “accept terms”.#2019-02-2419:56kwladykaIf somebody is interested in, this is my todo: - autocomplete for web browser - auto fill for web browser ^ both have issues to detect events depend on Chrome / Safari / Firefox etc. It is not directly about validations, but it is common issue to provide data for validation. - multiselect - improve tutorial#2019-02-2508:34vlaaadcljfx 1.0.0 — declarative, functional and extensible wrapper for JavaFX inspired by better parts of react and re-frame https://github.com/cljfx/cljfx Follow-up in #cljfx#2019-02-2518:57eccentric JGreat job :thumbsup: I’m working on a similar project for terminal-user-interfaces I’m launching this week as well 😄#2019-02-2519:33eccentric JAlso, per the discussion https://clojurians.slack.com/archives/C03RZGPG3/p1551114866154600 could you please create a #cljfx channel to discuss this project?#2019-02-2522:02vlaaadCreated #cljfx for discussions regarding cljfx#2019-02-2510:02jumarI've just published the first episode of the Clojure Quips screencast - very short Clojure videos: https://curiousprogrammer.net/2019/02/25/new-clojure-quips-screencast/#2019-02-2614:29eccentric JReleased cljs-tui lein template 0.1.0 https://github.com/eccentric-j/cljs-tui-template. A leiningen ClojureScript template to create rich terminal-user-interface apps. Development process detailed in https://eccentric-j.com/blog/5-announcing-cljs-tui-template.html.#2019-02-2614:30eccentric JI can answer questions or provide support in the zulip topic https://clojurians.zulipchat.com/#narrow/stream/151168-clojure/topic/cljs-tui-template or in #cljs-tui on Slack.#2019-02-2618:45iarenazamagnet/pubsub 0.3.1 https://github.com/magnetcoop/pubsub -- An opinionated Duct library that provides Integrant keys for publishing and subscribing to messages using MQTT or AMQP.#2019-02-2620:11ikitommi[metosin/spec-tools "0.9.0"] is out, https://cljdoc.org/d/metosin/spec-tools: lots of improvements to coercion, a non-validating select-spec and better documentation via #cljdoc. Big thanks to all the contributors!#2019-02-2816:44blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-6-CUDA-and-OpenCL#2019-02-2817:31chrisnWe wrote a blogpost about our exploration into isomorphic rendering (clojurescript, reframe): http://techascent.com/blog/isomorphic-rendering.html#2019-02-2817:58chrisnAlso, we completed another major research project and have some results. We took a kaggle kernel and with a lot of help from great people in the clojure community built out a version of it in clojure. We developed an ETL language to help with this that is similar to pandas. You can backtrack from the example to the libraries and all the documentation around all of this. We were able to get a clojupyter notebook working with oz visualizations. We plan to expand from this base to Apache Arrow and intel DAAL. https://github.com/cnuernber/ames-house-prices/blob/master/ames-housing-prices-clojure.md Livejournal version by Alan Marazzi https://nextjournal.com/alan/tech-dataset-getting-started#2019-03-0104:20johnchrepl https://chrome.google.com/webstore/detail/chrepl/ablpgchfbbfachdiakmieocbdgflgfjj A Chrome extension that injects a ClojureScript Figwheel repl into arbitrary webpages Website: https://chrepl.app/ Pricing: $3/month per seat, free for non-commercial / open source development (more details on revenue sharing to come) Example project: https://github.com/johnmn3/chrepl-example Roadmap: smooth existing experience; allow connection from more tools; convert tampermonkey scripts that users can use, change and share; build browser testing tools for testing against live sites Forums: here at #chrepl, on zulip at https://clojurians.zulipchat.com/#narrow/stream/187685-chrepl and on clojureverse at https://clojureverse.org/t/chrepl-a-chrome-extension-that-injects-a-clojurescript-figwheel-repl-into-arbitrary-webpages/3899#2019-03-0110:16pezI fail to inject when I try it:
GET  net::ERR_CONNECTION_REFUSED
load @ content.js:10
load_all @ content.js:12
(anonymous) @ content.js:23
#2019-03-0113:27john@U0ETXRFEW Hey thanks for giving it a spin! Did you setup a compatible figwheel project yet? Head on over to #chrepl for further discussion.#2019-03-0121:01dchelimskyCognitect Labs' aws-api 0.8.273 is now available: https://groups.google.com/forum/#!topic/clojure/PgnJxiam_qk#2019-03-0408:07vlaaadCljfx 1.1.0 is released. Cljfx is a declarative, functional and extensible wrapper for JavaFX inspired by better parts of react and re-frame. In this version I added a straightforward way to extend existing components so if you find some missing part, you can easily fill it yourself. Follow-up in #cljfx https://github.com/cljfx/cljfx/blob/master/CHANGELOG.md#110---2019-03-03#2019-03-0516:56borkdudehttps://github.com/borkdude/finitize, a tiny library to limit and realize infinite seqs#2019-03-0517:42eccentric Jbook-report - Released 0.1.1 https://github.com/eccentric-j/book-report - Fixed bug when formatting multi-line text#2019-03-0521:36podviaznikovthis looks super nice. Clean API and nice visual output!#2019-03-0523:40eccentric JThanks @U050K462N that means a lot!#2019-03-0600:58clj-daveI just released https://github.com/ElChache/formulario, a very simple library to make it easier to deal with forms in re-frame#2019-03-2621:59lilactownhx version 0.4.0 has been released! This is a major change and has a number of improvements: - Local state hook <-state now returns a tuple [value set-value] instead of an atom-like value - The hiccup parser hx.hiccup has been completely decoupled from React and made cross-platform - DX improvements like prettier display names and helper syntax for using higher-order components - Numerous bug fixes - Lots of tests Check out the full changelog here: https://github.com/Lokeh/hx/blob/master/CHANGELOG.md#040---mar-26-2019 Thanks to @orestis @mhuebert @roman01la @djebbz for the help! More to come soon 😄#2019-03-2706:51henrikCool! This looks interesting. What's the value proposition for using hooks in cljs?#2019-03-2708:34orestisThe promise that when concurrent React lands, you will get it “for free”, including prioritizing and canceling renders. Whereas with the current CLJS approaches (and with most/all other JS state management frameworks, to be fair) React doesn’t have the context to be nimble about updates. #2019-03-2708:35orestisAt the same time, hx takes an opinionated approach of using plain React components everywhere. So you could in theory hook it up with existing state management solutions. #2019-03-2708:37orestisIt’s early days, hooks look very promising but I expect things will be more stable and production ready in a few months time. #2019-03-2708:44orestisOh, forgot to mention - hooks allow you to do almost everything that class components provide (all the lifecycle methods) from functional components - in a way that’s actually reusable. So that’s a huge plus in my book. #2019-03-2708:51metasoarousGreetings! I'm happy to announce an exciting new feature of Oz: Live code reloading for Clojure. This idea was inspired by a talk on data science in Clojure by @aria42. In the talk Aria mused about what it might be like to bridge the divide between REPL, editor and notebook with a Fighweel-like hot-code reloading experience. This idea intrigued me and so I decided to take a stab at it. What came from this is a function oz.core/live-reload! which takes a filename and initiates a watch routine. When the file changes, Oz reruns starting from the first changed code-form in the file (ignoring whitespace). This simple strategy allows for a tight feedback loop, even with code which periodically takes a while to fetch or process data. This functionality (as well as a bunch of updates to Oz's core data visualization utilities) is available on [metasoarous/oz "1.6.0-alpha1"] (expect alpha2 out shortly as well, with the latest Vega updates). Please let me know what you think, and where you might see this being useful. https://github.com/metasoarous/oz#2019-03-2708:51metasoarousIf you're interested in seeing a brief demonstration of this functionality, please take a look at the short screencast I put together: https://www.youtube.com/watch?v=yUTxm29fjT4#2019-03-2717:58metasoarousQuick update: [metasoarous/oz "1.6.0-alpha2"] is now out, with the latest Vega libraries, as promised. Hope you enjoy. Thanks!#2019-03-2720:31luposlipSimple library to utilize huge JSON database files (`.ndjson`) as read-only database with next to no memory impact: https://github.com/luposlip/ndjson-db#2019-03-2810:15borkdudeI wonder if I can use this as a replacement for writing and reading EDN files, since I’m having performance issues with big ones.#2019-03-2810:17borkdudeWill this still read and deserialize the entire JSON file each time you do a query?#2019-03-2810:19borkdudeAh, so it will index the start and end of each json object and only read that when you query. Clever.#2019-03-2810:19borkdudeSo it’s optimized for reads.#2019-03-2810:38luposlipExactly. But could easily be extended to support lots of other file formats. You're welcome to submit PR's if you want, otherwise I'll probably do it myself some weekend soon 🙂
#2019-03-2810:39borkdude@U06QS81LM This is my use case: https://github.com/borkdude/clj-kondo/issues/22#2019-03-2810:39luposlipIt's really good for pipelining stuff - I personally use it together with JSON Schema validations with this small wrapper library: https://github.com/luposlip/json-schema#2019-03-2810:45borkdudeCool stuff.#2019-03-2810:55luposlipI'll take a look at it later!#2019-03-2810:56borkdudeThanks. You obviously have thought about this already, so your input is valued highly.#2019-03-2822:57luposlipWill get back to it tomorrow, it's been a crazy day ;) #2019-03-2823:00borkdudeNo problem.#2019-03-2907:17borkdudeI’ve decided to solve my problem otherwise, so I don’t need big json files#2019-03-2810:54borkdudeclj-kondo has prebuilt binaries now for Linux and Mac: https://github.com/borkdude/clj-kondo#installation Prebuilt binaries from SNAPSHOT versions are available from CircleCI: https://circleci.com/gh/borkdude/clj-kondo/232#artifacts/containers/0#2019-03-2815:21blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-11-A-Simple-Neural-Network-API#2019-03-2819:33bringeHello. I made this Clojure wrapper for the Coinbase Pro API a while back, and I don't think I mentioned it here. Just want to throw it out here so that if anyone wants to play with cryptocurrency (at your own risk 😅) using Clojure, this can speed up your efforts. Also it was my first Clojure project 🎉. Constructive criticism is welcome. https://github.com/bpringe/coinbase-pro-clj#2019-03-2912:54leonoelNew release of cloroutine : https://github.com/leonoel/cloroutine New feature : coroutine cloning New guides : delimited continuations + monads Follow up : https://clojureverse.org/t/cloroutine-v1/3300/15#2019-03-2914:25rutledgepaulvAnnouncing the first release of [com.vodori/schema-forms "0.1.0"]. Schema-forms is a library for converting prismatic schemas into JSON schema that is compatible with Mozilla’s react-jsonschema-form. It’s probably best suited for generating admin interfaces and the like. You can find more information in the readme here: https://github.com/vodori/schema-forms. Cheers!#2019-03-2914:30Daniel Hinesreact-jsonschema-form is absolutely brilliant. Very cool lib!#2019-03-2914:52rutledgepaulvthanks! also big thanks to @U0GN0S72R for the leg up with schema bijections - helped solve some of the nuance in a clean way#2019-03-2915:52ikitomminice! there is also schema-tools, which does conversion, but only for schema->swagger-json-schema (but also for clojurescript). pure json-schema is/was on the roadmap. https://github.com/metosin/schema-tools#2019-03-2918:01rutledgepaulvThanks! I had briefly tried the implementation in compojure-api/schema-tools when we were getting started but ultimately wanted something a little more tailored around react-jsonschema-form’s handling of polymorphic objects and abstract schemas, etc. I am sad we don’t yet support clojurescript.#2019-03-2918:15bozhidarI just wrote an (long overdue) overview of nREPL 0.6 https://metaredux.com/posts/2019/03/29/nrepl-0-6.html Enjoy!#2019-03-2919:45dchelimskyCognitect Labs' aws-api 0.8.283 is now available! https://groups.google.com/forum/#!topic/clojure/cOIF5cjAecI#2019-03-2922:32carocadhey guys I just published 0.3.0-snapshot2 version of Rata. This version adds supports for transaction middlewares. Let me know your thoughts https://github.com/hiposfer/rata/tree/transact#2019-03-3017:38devthLast week I ran a Yetibot workshop at the main eBay campus in San Jose. Check out the screencast! https://yetibot.com/blog/2019-03-26-yetibot-workshop-at-ebay#2019-03-3107:36danielcomptonAnnouncing the intial release of defn-spec, a library to create specs inline with your defn. It uses the same syntax as Schema, so you probably already know how to use it. https://danielcompton.net/2019/03/31/announcing-defn-spec https://github.com/danielcompton/defn-spec#2019-03-3108:33pezAbout attrs maps in functions. I use them pretty often. Mostly for pre and post predicates (which I guess is less important with this library), but also for inlining tests. #2019-03-3108:52vemv@U0ETXRFEW interesting! How do you run those inline tests?#2019-03-3109:32pezSame way as I run any tests. The Clojure test runner looks there for them. Unfortunately the ClojureScript test runner does not. I tried to fix that a while ago, but my macro fu was insufficient. #2019-03-3109:49vemvNice. How how do the defns themselves look like? Can't imagine ^^#2019-03-3109:50pezLike so:
(defn absolute
  "The absolute value of a number."
   {:test (fn []
            (is= (abs 5) 5)
            (is= (abs -2) 2)
            (is= (abs 0) 0))}
  [x]
  {:pre [(number? x)]}
  (if (pos? x)
    x
    (- x)))
#2019-03-3109:51pezWhich shows us that I lied. The pre-post-map is a separate one. 😄#2019-03-3109:54pezAlso in that example I am using some convenience macros from ysera.test.#2019-03-3109:55vemvReally nice. Not sure if will immediately adopt, but happy to learn!#2019-03-3109:57pezI can recommend giving inline tests a try. I sometimes fall into a very sweet flow of doing my REPL experiments inside that attrs-map, where some of the experiments will stay as tests.#2019-03-3116:45danielcompton@U0ETXRFEW the attr maps that don't work are ones that you put at the end of your function definition after all of the arities#2019-03-3116:47danielcomptonLooking at the definition (defn name doc-string? attr-map? ([params*] prepost-map? body) + attr-map?) it's the last attr-map? which isn't supported#2019-03-3117:03pezGot it. Amazing. #2019-03-3117:15danielcomptonYeah, I didn't even know they were a thing#2019-04-0115:43eccentric JWow! Here I was thinking Elixir’s doc-string tests were really clever, Clojure accomplished the same thing except even more simple — it’s just a map with regular Clojure instead of a specially formatted string.#2019-03-3112:21carocadI just releases the v0.3.0 of https://github.com/hiposfer/rata. A library to help manage state on Clojurescript app with Datascript and Reagent 🙂. Your feeback is most welcome#2019-04-0115:04OlicalIt was posted by some people on HN and the subreddit, but for those of you who don't frequent those sites: I wrote a post up on various ways to start different kinds of socket prepls https://oli.me.uk/2019-03-22-clojure-socket-prepl-cookbook/ with a tiny bit of background as to what a socket prepl actually is.#2019-04-0202:05pyrmontJust wanted to say thank you for this. I'm interested in better integration for Vim with CLJS REPLs like Planck and have been looking for information about PREPLs. Oh, and Conjure looks great! :)#2019-04-0117:31tony.kayFulcro 2.8.8 Released. Includes a global component registry, which makes use of components within mutations easier (no circular refs) and also allows for tracking of component classes in app state without causing serialization problems or Inspect difficulties. https://github.com/fulcrologic/fulcro#2019-04-0202:42caioJust published the first release of kaocha-greenlight, an extension to run Greenlight tests using Kaocha (two awesome projects, so it had to be done 😬): https://github.com/caioaao/kaocha-greenlight Kaocha is a full featured test runner and Greenlight is an integration testing framework based on stuartsierra's components. Go check them out! https://github.com/amperity/greenlight https://github.com/lambdaisland/kaocha#2019-04-0214:40jerger_at_ddapallet 0.9.1 released. Now pallet works on jdk >8 & clojure 1.10 https://github.com/DomainDrivenArchitecture/pallet#2019-04-0302:09gordonJust published a Docker image for running a Datomic Free on-prem transactor. There are others out there, but this one meets my needs. Features include: - Automatic memory sizing: Runs in 4G, 2G, 1G, and 512M flavors, detected automatically at runtime based on the memory limit passed to the container. - Secure by default: Well, it doesn't run as root by default, anyway 😄 - Logs to standard output: Follows Docker best practices, doesn't leave log files lying around. https://github.com/gws/docker-datomic-free-transactor#2019-04-0306:11jerger_at_ddadda-serverspec 1.3.1 released. Enables jdk > 8 & some bugfixes https://github.com/DomainDrivenArchitecture/dda-serverspec-crate#2019-04-0310:07Adam Helins1.0.0 Release for handling GPIO lines from any Linux systems (Raspbian on Raspberry Pi amongst other) https://github.com/dvlopt/linux.gpio.clj#2019-04-0312:13asierFYI - https://github.com/magnetcoop/dashboard-manager.grafana Tests and documentation coming soon.#2019-04-0312:25blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-12-A-Simple-Neural-Network-Training-API#2019-04-0313:26mpenethttps://twitter.com/juxtpro/status/1113423862098796546#2019-04-0319:35nathanmarzHappy to announce my startup Red Planet Labs, a new Clojure company with $5M in funding https://redplanetlabs.com/#2019-04-0319:44benoitCongrats on the launch!#2019-04-0320:08richiardiandreaAwesome will follow closely!#2019-04-0320:42eggsyntaxCongrats, Nathan! Took me a while to find anything substantive(ish) about it; for other folks who are curious, https://medium.com/red-planet-labs/introducing-red-planet-labs-2a0304a67312#2019-04-0404:17Vincent CantinCongratulations for the launch, and good choice for Clojure !#2019-04-0413:36borkdudeA new version of clj-kondo is available with improved support for CLJC files and better caching performance. You can now install clj-kondo with brew: https://github.com/borkdude/clj-kondo#installation And Emacs integration can be enabled using: https://github.com/borkdude/flycheck-clj-kondo Happy linting!#2019-04-0414:23yuhanI hope this is the right place to ask, but does clj-kondo use static analysis for its linting like joker? It wasn't very clear from the readme.#2019-04-0414:23borkdudeyes#2019-04-0414:24borkdudeI’ll add it to the README#2019-04-0414:25yuhanThanks! One major issue I had with squiggly-clojure's plugins was having to be very careful about putting every side-effectful function call in a comment form even if it was just for temporary testing#2019-04-0414:25yuhanstatic analysis is definitely the way to go here 🙂#2019-04-0414:53borkdudeyeah. also with CLJS I sometimes find it hard to get a REPL running. with this tool I get at least some errors about invalid arities before sending it to the browser for reloading#2019-04-0417:57mirohi guys! I've released titanoboa v. 0.8.0 - main notable change is a new API to support new GUI features: - REPL for java lambdas (yay! you just mark the whole java lambda code and if you hit ctrl-enter it will get evaluated using current step's properties as input) - code autocomplete https://github.com/mikub/titanoboa#2019-04-0513:59vlaaadWhen releasing #cljfx, a declarative, functional and extensible wrapper of JavaFX inspired by better parts of react and re-frame, I decided to opt in accretion / relaxation / fixation approach to growing an open source project, and now I want to share why I did it and how it’s been so far: https://vlaaad.github.io/2019-04-05/growing-cljfx#2019-04-0620:52ivanaHello. I want to present you yet another nobody needed Clojure gebugging library 🙂 https://github.com/Ivana-/bb-debug feel free to give any feedback#2019-04-0717:26borkdudeit’s now possible to use clj-kondo with IntelliJ IDEA: https://cljdoc.org/d/clj-kondo/clj-kondo/2019.04.07-alpha/doc/editor-integration#intellij-idea#2019-04-0720:07JakubClosh, a unix shell written in Clojure, gets a new release 0.4 which adds support for scripting. Now it can be used as a tool for automating various tasks or writing glue code for cloud orchestration: https://www.reddit.com/r/closh/comments/bakgvv/closh_v04_released/#2019-04-0916:04ilevdComposable SQL in YAML - https://github.com/ilevd/hicosql#2019-04-0916:17eval2020Kind reminder that a searchable archive of this Slack-team can be found at Clojurians-Zulip: https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive If a Slack-channel is not showing up there, make sure to add @zulip-mirror-bot to said Slack-channel (ie /invite @zulip-mirror-bot). For those interested: the syncer-code was just released and can be found at https://gitlab.com/eval/slack-zulip-sync/tree/master#slack-zulip-sync#2019-04-0920:42bmaddyThe StackOverflow survey is out. Clojure rocked the salary graph again: https://insights.stackoverflow.com/survey/2019#2019-04-0922:15vemvnow I need a Clojure logo with a $ replacing λ#2019-04-1012:55blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-13-Initializing-Weights#2019-04-1015:46Alex Miller (Clojure team)in case anyone sees a report and wonders, there was a big gas explosion in Durham, a couple blocks from the Cognitect office. everyone at Cognitect is fine.#2019-04-1015:58Alex Miller (Clojure team)https://abc11.com/live-video-durham-explosion-brings-down-building-sparks-fire-downtown/5241686/#2019-04-1018:27pezHorrible!#2019-04-1112:03borkdudehttps://twitter.com/_anmonteiro/status/1115990073256890370#2019-04-1114:17Noah Bogarthttps://github.com/anmonteiro/lumo as that announcement doesn't have a link directly to the repo#2019-04-1114:02victorbAny clojurians wanna help build a community owned javascript module registry? I just opened the first version of the repository, currently working on nailing down the governance, but anyone is welcome to join it! First version was written in Clojure and will probably keep it that way, as it's basically just piping together bunch of services. You can check it out here: https://github.com/open-services/open-registry#2019-04-1321:59hipster coderWill this help avoid npm problems like the Left Pad incident?#2019-04-1409:11victorbIndeed as modules are not removed from open-registry. The first mvp version will also include a decentralized mirror, so if it's removed from one registry, it's possible it still exists in another#2019-04-1418:45hipster coder@UEJ5FMR6K That’s a genius idea. Because my biggest worry about using npm is if one dependency is deleted and brings my entire front-end framework to a hault.#2019-04-1419:16victorbyeah, I have the very same worry#2019-04-1116:53Alex Miller (Clojure team)Clojure 1.10.1-beta2 is now available https://clojure.org/community/devchangelog#_1_10_1_beta2_apr_11_2019#2019-04-1116:53Alex Miller (Clojure team)would love to have more feedback, particularly about the error reporting differences when using clj as a runner (not repl) or with lein, etc.#2019-04-1117:23seancorfieldThank you for CLJ-2497!#2019-04-1117:33Alex Miller (Clojure team)thank you! :)#2019-04-1117:41Alex Miller (Clojure team)see https://www.reddit.com/r/Clojure/comments/bc264v/clojure_1101beta2_is_now_available/ekn9qr3/ for an example on the error reporting differences#2019-04-1117:42eccentric J😄 That’s beautiful!#2019-04-1117:45Alex Miller (Clojure team)Leiningen could be doing a lot more here, but it's a much better default imo. If lein took more control over the subprocess invocation and actually caught the error in an in-process shim, it could do all kinds of things. (regardless of the changes in 1.10.1)#2019-04-1221:00dchelimsky[ANN] Cognitect Labs' aws-api 0.8.292 https://groups.google.com/forum/#!topic/clojure/uvOzyfBrbyc#2019-04-1303:51wilkerlucio[com.wsscode.pathom "2.2.13"] is out! This is an exciting release! Pathom now provides a new index called ::pc/index-attributes, this index contains aggregated relationship data about the attributes in your system. In combination with that there is [com.wsscode.pathom-viz "1.0.7"] which provides a new tool called Index Explorer. The index explorer is a new tool to help users understand the pathom index, as the system grows it gets harder to understand what's there, the Index Explorer is a kind of auto generated documentation tool that evolves with the Pathom system as it grows. This tool is also integrated in Fulcro Inspect, if you are using Pathom with Fulcro apps you can get the index explorer working in no time! New docs are introduced to explain everything about the Index Explorer, check it at: https://wilkerlucio.github.io/pathom/#_exploration_with_pathom_viz. Look out for the new parser docstrings, they are much more informative now. There are also some bug fixes, you can see a full change list at: https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2213. Hope you enjoy!#2019-04-1417:30danielcomptonClojurists Together is funding two Clojure projects $3k/mo for 3 months. Applications close midnight 15th April PST. If you know of a project that can use support, please encourage them to apply. If you maintain a Clojure project, especially one highlighted here: https://www.clojuriststogether.org/news/q2-2019-survey-results/, please consider applying: https://www.clojuriststogether.org/open-source/#2019-04-1421:13bozhidarBoot 2.8.3 is out https://github.com/boot-clj/boot/releases/tag/2.8.3 (it bundles nREPL 0.6 now)#2019-04-1510:23borkdudeNew release of clj-kondo. Java method arity checking and more: https://github.com/borkdude/clj-kondo/releases/tag/v2019.04.15-alpha#2019-04-1510:52jumarAny ETA when flycheck-clj-kondo will be available in MELPA?#2019-04-1510:53borkdudeUnfortunately that’s not up to me, but to the MELPA maintainers#2019-04-1511:41plexusHeart of Clojure tickets are finally available. €79 early bird, €99 regular https://mailchi.mp/2601f54499b6/tickets-available-announcing-our-sponsors#2019-04-1511:42borkdude@U07FP7QJ0 Is the ticket refundable until some limited time frame before the conf? I’d like to come but not entirely sure about my schedule in August yet#2019-04-1511:42borkdude(ClojureD and ClojuTRE have this option)#2019-04-1511:46plexusTickets are not refundable, but they can be transferred to someone else.#2019-04-1511:46borkdudeThat’s cool too. Thanks.#2019-04-1512:09blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-14-Learning-Regression#2019-04-1517:18eval2020ohmyclj v0.4 - generate/dev/test/run Clojure scripts. https://gitlab.com/eval/ohmyclj/tree/master#ohmyclj Quick Intro Given the executable script hello_world.clj:
#!/usr/bin/env ohmyclj
"DEPS='clj-time=0.15.1'"

(ns user
  (:require [clj-time.core :as t]))

(defn -main [& args]
  (println (str "Hello, " (nth args 0 "World") "! Time is now " (t/now))))

(ns test
  (:require [clojure.test :refer [deftest is testing are]]
            [user]))

(deftest main-test
  (is (some? (user/-main "Foo")) "FIXME"))
ohmyclj allows you to: - run it: ./hello_world.clj Clojurians (e.g. Hello, Clojurians! Time is now 2019-04-15T14:47:27.235Z) - try it: ohmyclj repl hello_world.clj (iterate quickly with helper-functions like (reload)) - test it: ohmyclj test hello_world.clj Try it yourself: ohmyclj new > hello_word.clj
#2019-04-1701:53eunminA Duct module for Lacinia graphQL library - https://github.com/kakao/duct-lacinia#2019-04-1716:16mars0iI wrote up some informal remarks on agent-based modeling in Clojure here: https://github.com/mars0i/masonclj/blob/master/doc/general/ABMsInClojure.md. Agent-based modeling can't be defined very precisely, but the general idea is to model a system using interactions between many entities--"agents"--the code for each of which is often very simple. For example, each agent might be a simplified model of a person or animal. (Agent-based modeling has nothing to do with the Clojure language agent concept.) @lspector and others: I'm am also releasing a very small library that's intended to make it easier to use MASON (an ABM library written in Java) with Clojure: https://github.com/mars0i/masonclj . Feedback, questions, suggestions, etc., are all welcome.#2019-04-1719:44Alex Miller (Clojure team)FYI, I made two small changes to the transit-format spec today. 1) is an update of the note re durable use to be less of a warning, as transit 0.8 was released in 2014 and has never changed. 2) Fixed a typo in the text regarding the base cache ordinal to match the example and all existing impls (which was issue #39). Happy transiting! https://github.com/cognitect/transit-format/blob/master/README.md#2019-04-1719:45Alex Miller (Clojure team)And also, it was shocking to me that transit-format is now almost 5 years old.#2019-04-1819:56richiardiandreaI created a channel #clojure-north here and on Zulip for the newly born conference happening this weekend clj cljs#2019-04-1917:27refset[ANN] Crux—open source database alpha launch by JUXT https://groups.google.com/forum/#!topic/clojure/vl11uklho-k#2019-04-1921:28dchelimsky[ANN] Cognitect Labs' aws-api 0.8.301 https://groups.google.com/forum/#!topic/clojure/TXxEx-2OV2s#2019-04-1921:47Alex Miller (Clojure team)InsideClojure Journal 2019.16 - http://insideclojure.org/2019/04/19/journal/#2019-04-2119:26ivanaGuys have a rest on picnic, but hedgehog comes and asks - have you an electrical tape? No, said guys and continued a rest. But in a some time hedgehog comes again and said - guys, it was not easy, but I brought you an electrical tape! 🙂 I brought you a NASO (never again stack overflow) project - micro helper about 50 strings of code, needed one time in a several years 🙂 https://github.com/Ivana-/naso#2019-04-2120:02Noah Bogartthat's super impressive!#2019-04-2120:08ivanathanks for such your assessment of hedgehog's modest toy 🙂#2019-04-2203:27johnSweeeet#2019-04-2205:19didibusI know the setup says just copy/paste. But if you only added a qualified namespace to core, then we could easily depend on it from deps.edn.#2019-04-2206:04henrikI thought this would be a plan to buy and shut down StackOverflow. But this is really cool also 🙂#2019-04-2208:13ivanaNot this time - I'm still use https://stackoverflow.com for regular searching my difficulties 🙂#2019-04-2121:15borkdudeclj-kondo 2019.04.21-alpha: https://github.com/borkdude/clj-kondo/releases/tag/v2019.04.21-alpha also, https://github.com/borkdude/flycheck-clj-kondo is now available on MELPA#2019-04-2205:56seancorfieldseancorfield/next.jdbc "1.0.0-alpha8" I've talked about this in a few groups -- it's been a long time coming. This is the "next generation" of clojure.java.jdbc -- a modern wrapper for JDBC, that focuses on reduce/transducers, qualified-keywords, and datafy/`nav` support (so, yes, it requires Clojure 1.10). https://cljdoc.org/d/seancorfield/next.jdbc/1.0.0-alpha8/doc/readme The next generation of It's intended to be both faster and simpler than clojure.java.jdbc and it's where I intend to focus my future energy, although I have not yet decided whether it will ultimately be a new set of namespaces in the Contrib lib or a separate, standalone OSS library! At this point, I'm looking for feedback on the API and the approach (as well as bugs, performance issues, etc). Please take it for a spin and let me know what you think (here on Slack or via Issues on GitHub). The group/artifact ID will change at some point: and the actual namespaces will too, but I will try to make that as painless as possible when I take this out of the alpha phase. all follow-up to #2019-04-2312:40blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-15-Weight-Decay#2019-04-2313:22plexuskaocha-cljs 0.0-32 is out, which fixes output capturing, and adds support for ClojureScript async tests and (async) fixtures https://github.com/lambdaisland/kaocha-cljs/blob/master/CHANGELOG.md#2019-04-2512:54borkdudehttps://github.com/borkdude/clj-kondo/releases/tag/v2019.04.25-alpha#2019-04-2521:26jstokes[ANN] greenlight 0.1.5 released, adds support for test :only with a namespace and parallel test execution (https://github.com/amperity/greenlight/tree/develop#parallel-test-execution)#2019-04-2521:35nullptrLearn more about Greenlight at https://eng.amperity.com/posts/2019/04/greenlight#2019-04-2618:48Alex Miller (Clojure team)The legacy Clojure design wiki (at https://dev.clojure.org/display/design) is being decommissioned. All data has been archived to a read-only copy at https://archive.clojure.org/design-wiki/display/design/Home.html. If you have links out there pointing to the old pages, please update to this new location.#2019-04-2620:55eccentric JOof just learned of this now. I really like learning about the design considerations in play. Is there any public place thoughts\discussions like these will be made accessible?#2019-04-2621:03Alex Miller (Clojure team)Past thoughts are in the link above. Future thoughts we are trying to build into release docs on http://clojure.org#2019-04-2709:38vlaaadThat was surprisingly interesting read!#2019-05-0118:19danielcomptonWould you look at adding redirects to the new URLs as well?#2019-05-0118:35Alex Miller (Clojure team)I might, kind of focused on jira stuff and where that goes atm#2019-05-0119:55danielcomptonAlso, https://archive.clojure.org/design-wiki/display/design/Home.html seems to be down at the moment?#2019-05-0119:55danielcomptonAh, back now#2019-05-0121:07Alex Miller (Clojure team)it's just a static s3 bucket w/cloudfront, shouldn't really ever be down#2019-04-2818:39oceanfish81http://vijaykiran.com/2019/04/defn-48-david-miller/#2019-04-2821:37Alex Miller (Clojure team)Inside Clojure journal 2019.17 http://insideclojure.org/2019/04/28/journal/#2019-04-2909:48jacekschaehttps://clojurescriptpodcast.com/#2019-04-2915:39blueberryhttps://dragan.rocks/articles/19/Deep-Learning-in-Clojure-From-Scratch-to-GPU-16-Momentum#2019-04-2920:41dimovichA little library to get started with a backend project: https://github.com/dimovich/roll#2019-04-2922:39lilactownhx 0.5.0 has been published! This version includes: - Improved hiccup interpretation performance by 10x - Deprecated Hooks names prepended with <-; adopted useXyzAbc convention - A new hx.hooks.alpha namespace with experimental Hooks - Alpha-level "reloadable" hook useReloadable and useStateOnce that persist their state across hot reloads. https://github.com/Lokeh/hx#2019-04-3015:37cjsauerHello all 👋 I’ve just extracted a PUBG API client library from one of my pet projects, as I figured other community members may find it useful. I think it’s actually a really fun way to learn/play with Datascript using some real-world data, as it includes both a spec and a Datascript schema (you must provide Datascript as a dependency yourself, this repo doesn’t force it on you). If you’re unaware, PUBG is a first-person shooter video game in the “battle royale” genre, which exposes tons of player stats as an API. https://github.com/cjsauer/pubg-clj#2019-04-3018:32Alex Miller (Clojure team)REBL 0.9.157 is now available - improved var nav, with the ability to see runtime uses and used-by relationships https://www.patreon.com/posts/rebl-0-9-157-var-26478905#2019-04-3018:44dominicm@U064X3EF3 how does the uses work?!#2019-04-3018:46Alex Miller (Clojure team)I didn't work on it, sorry, don't know#2019-04-3018:48dominicmDo you know how I can find out?#2019-04-3019:41seancorfieldGo ask in #rebl 🙂#2019-04-3018:35Joe LaneThese dependency relationship navigations are AMAZING!#2019-05-0216:06chrisnThe http://tech.ml system is upgrade from the ground up. Literally from the ground. ## tech.datatype This is the core of the system. It provides the ability to create native and jvm based contiguous contains of data, accelerated copying of data to/from native and jvm, and some basic mathematics. It also provides a graduated pathway from lisp sequence based programming to apl/numeric array-based programming. See the docs if you want to get into how that works. Finally it has sparse support at the base level so that moving towards NLP is easier. * Generic math/tensor support at the base level. * [apl version of game of life](https://github.com/techascent/tech.datatype/blob/master/test/tech/v2/apl/game_of_life.clj) * [sparse game of life](https://github.com/techascent/tech.datatype/blob/master/test/tech/v2/apl/sparse_game_of_life.clj) * kixi.stats and apache commons-math3 are included * [docs and cheatsheet](https://github.com/techascent/tech.datatype/tree/master/docs) * [accelerated blas support](https://github.com/techascent/tech.datatype/blob/master/src/tech/v2/tensor/impl.clj#L902) ## tech.ml.dataset Major refactor to remove the data-based etl abstraction (it is now functions) in an effort to reduce 'magic' and enable a more exploratory pathway. Given the datatype upgrade above it is also just less necessary; you can do some of your exploration without the dataset library. * [walkthrough](https://github.com/techascent/tech.ml.dataset) ## http://tech.ml Mainly upgraded to sit on top of both previously mentioned libraries. Same great flavor, lots more horsepower especially in the exploratory case: * [walkthrough](https://github.com/techascent/tech.ml) * [real world example](https://github.com/cnuernber/ames-house-prices/blob/master/src/clj_ml_wkg/ames_house_prices.clj) Scroll down to end of real world example for demonstration of moving from exploratory phase to actual production.#2019-05-0218:37otfromGreat stuff. Looking forward to digging into it especially to see how the kixi.stats stuff will work#2019-05-0316:55chrisnThe gist is with kixi that anything produced via any vector statement involving an iterable or a reader implements both java.lang.Iterable and potentially java.util.List and java.util.RandomAccess. So kixi works with the lazy readers and such out of the box with no further changes. As do most of the clojure functions (count, vec, etc).#2019-05-0219:33danielcomptonThis quarter Clojurists Together is funding Fireplace and Boot $9k each! boot-clj https://www.clojuriststogether.org/news/q2-2019-funding-announcement/#2019-05-0403:56mauricio.szaboJust published Chlorine, an Atom package to connect to Socket REPL (supports Clojure, ClojureScript with Shadow-CLJS and Lumo): https://github.com/mauricioszabo/atom-chlorine#2019-05-0404:13seancorfieldAnd it supports Cognitect's REBL! Follow-up to #chlorine#2019-05-0605:38jacekschaeLearn re-frame course is ready! It contains 64 videos and +10h of content. It’s on SALE until Sunday and there is also a free version, which contains first 2 hours of the pro course! https://www.learnreframe.com/#2019-05-0608:54borkdudehttps://github.com/borkdude/clj-kondo/releases/tag/v2019.05.06-alpha#2019-05-0612:51mkvlr🎉 We’ve opened signups on Nextjournal today and would love to get your feedback: https://nextjournal.com/mk/public-beta Nextjournal is a multi-language notebook platform with support for Clojure (as well as Python, Julia, R). It’s also built on Clojure and Datomic. If you’re looking for easier ways to collaborate or share your notebooks, please give it a try! 🙏#2019-05-0710:23alexyakushevMaybe #announcements is the wrong place for this, but I've written a detailed post about our experience with Shenandoah GC: http://clojure-goes-fast.com/blog/shenandoah-in-production/ Hope you enjoy!#2019-05-0710:30pezI think it fits here. 😃 And there is also #news-and-articles#2019-05-0710:39mkvlrnice, thanks for sharing. Unfortunately it looks like it won’t be supported by oracle and we’d like to switch to Graal VM for the polyglot support so we can’t use it but it looks really impressive.#2019-05-0711:03vemv> the application as a whole, not only the GC phase, is slower with Shenandoah GC which specific resource gets restrained? (e.g. CPU)#2019-05-0711:22damien@U45T93RA6 I believe that's due to the concurrent sweeps i.e. that you must pay the latency cost during GC passes, even though they're individually small. I work at a Go shop and there are a lot of similarities between Go's mark & sweep GC and Shenandoah. One makes the same trade-off with throughput.#2019-05-0712:00alexyakushevThis is because Shenandoah uses forwarding pointers and memory barriers for each object field access. It must do that so that compaction (relocation) can happen concurrently with the application.#2019-05-0714:50alanThe second scicloj meeting will take place next week! https://twitter.com/scicloj/status/1118828437597192192#2019-05-0806:46jacekschaeClojureScript Podcast - Why ClojureScript with David Nolen https://clojurescriptpodcast.com/#2019-05-0807:21pyrmontOoh! First episode! I'm looking forward to it 🙂 Oh, and I don't know anything about how formatting works in podcast RSS feeds but in Overcast, none of the links in the show notes are linked.#2019-05-0809:44jacekschaeI know, it’s a bit of a bummer with hosting this on soundcloud - it doesn’t support html, just text.#2019-05-0810:03pyrmontAh, OK. That's a shame :(#2019-05-0812:41pezI've listened now. Superduper awesome. My only disagreement would be shadow wasn't highlighted as the easiest way to start with ClojureScript in many cases. It is so out-of-the-box just working! But I shouldn't derail from my praise of the episode... I loved the pace and how there were zero bullshit from start to get to the interesting stuff. Also, very, very good that you often took a few seconds to introduce all the buzz terms that get thrown around. Very professional and I think this episode should be shared in many developer communities where they might benefit from knowing Why ClojureScript?.#2019-05-0812:44pezIn fact, I'm about to share it in a Swedish dev community. What's the two-three sentence intro to who David Nolen is?#2019-05-0813:04jacekschaethank you so much for this kind words. Not sure if you can fit David into three sentences 🙂#2019-05-0813:45pezWell, I'm mostly interested in a short intro about what his role is when it comes to ClojureScript. (Actually something for the show notes to inform about.)#2019-05-0815:55jimmyDavid Nolen is the lead developer and maintainer of clojurescript.#2019-05-0817:31pezThanks, @U5K8NTHEZ , I used that in my post. It's racking up quite a lot of interest already.#2019-05-0901:14David RenoJust listened to it and I enjoyed it. Thanks for creating it. #2019-05-0906:15jacekschaeThank you @UBMFBEWKY#2019-05-0909:32manuelWe've recently published corallo, a tiny graph library in Clojure. It's available on Clojars too. https://github.com/7bridges-eu/corallo#2019-05-0910:38LasCongrats! A short tl;dr a.k.a. Rationale would be helpful imho, this is just a feedback, no expectation or obligation. 😉#2019-05-0910:40manuelthanks for the feedback, we'll add it soon. 🙂#2019-05-0910:42delaguardoalso comparison with another graph libraries will help a lot. [ubergraph](https://github.com/Engelberg/ubergraph) as example#2019-05-0910:44manuel@U7JKD4ENQ done. @U04V4KLKC we'll see what we can do.#2019-05-0910:44delaguardocool!#2019-05-0915:27droneyeah, I’m curious why ubergraph/loom wasn’t used. I think both those libs could use some cleanup and should be merged, but they do work. and “because we wanted the experience of building a graph library” is a perfectly good reason 🙂#2019-05-0919:13metasoarous@UCF779XFS There are some reasons not to merge loom and ubergraph, IIRC from having talked with @U0518RMLD.#2019-05-0919:17dronedon’t want to go too offtopic of this thread, but I would be interested in hearing reasons/plans for future of graph libs on clojure. loom has essentially been (all but?) abandoned with many outstanding issues and no responses from the devs. ubergraph seems to be a better model. it might be that “merging” just meant ubergraph replaces loom and takes ownership of the protocols and algorithms included in loom#2019-05-0921:07mdallastella@UCF779XFS I know we shouldn't reinvent the wheel, loom and ubergraph are awesome and far more complete than corallo. We wrote it to have something small, understandable and aimed to direct graphs (maybe we should change the description). I think corallo is more idiomatic, no protocols or any other "Javaish" stuff in its core, but pure clojure data structures. That's all.#2019-05-1318:45metasoarousFWIW, I consider protocols/records a very Clojuric take on Java interfaces, and think this is an appropriate application of the feature. But I concede, it's not Just Data ™️#2019-05-1320:25droneyeah, I don’t think it’s fair to write-off protocols because they are similar to Java interfaces. most languages have some way of using polymorphism to define a group of related functions. e.g., Haskell’s typeclasses#2019-05-1012:13ikitommiJust released metosin/spec-tools "0.9.2": Fixes to coercion and a experimental spec-tools.spell namespace for closing keys-specs. Uses com.bhauman/spell-spec & expound under the hood. Big thanks to all contributors! https://github.com/metosin/spec-tools#2019-05-1015:07eval2020rebel-prepl v0.1 - connect to a socket server using rebel-readline. https://gitlab.com/eval/rebel-prepl/tree/master#rebel-prepl Get started Start socket server:
$ clj -J-Dclojure.server.jvm="{:port 5555 :accept clojure.core.server/io-prepl}" -r
user=> (def a 1)
#'user/a
user=> _
Connect:
$ clojure -Sdeps '{:deps {rebel-prepl {:git/url "" :sha "113bf17b9e6209369e2f541d6f27aa07ddd9d65f"}}}' -m rebel-prepl.main
user=> a
1
user=> _
#2019-05-1015:21lilactownawesome!! is this implemented as a rebel-readline "service" or is it more involved?#2019-05-1017:09eval2020thanks, it's mostly the local service using a customized clojure.core.server/remote-prepl - still some things missing that one would expect of a prepl-service (see 'known issues' in README).#2019-05-1119:40mauricio.szaboJust published Chlorine v. 0.1.2, Atom's package to Clojure Socket REPL, Shadow-CLJS and Lumo: https://github.com/mauricioszabo/atom-chlorine Discussions, feedbacks, ideas, and if you want to help, ping me at #chlorine channel!#2019-05-1219:39borkdudeclj-kondo v2019.05.12-alpha is out now! https://github.com/borkdude/clj-kondo/releases/tag/v2019.05.12-alpha#2019-05-1220:22ilevdHiCoSQL 0.2.0 is out: https://github.com/ilevd/hicosql#2019-05-1307:20slipsetHi all, Calva, the Clojure IDE for vscode is getting ready for the release of Calva-2.0.0. The prebuilt binaries are available here: https://github.com/BetterThanTomorrow/calva/tree/dev/alpha-buld?fbclid=IwAR1lCkXfqZXWDHtUdjnPUnrBHypWfPjjdbDCzZu8fx91SKctL_KESVFmReA If you use vscode and could take this for a spin, it would be much appreciated. Feedback welcome in #calva-dev#2019-05-1313:28dchelimsky[ANN] Cognitect Labs' aws-api 0.8.305 https://groups.google.com/forum/#!topic/clojure/rKAbv6-U3CM#2019-05-1314:34ikitommimetosin/reitit "0.3.2" is out, with the following changes: * Closed-spec validation of route-data * Sieppari-style interceptors work now with reitit-pedestal * Spec coercion enhancements (via spec-tools) * Better ring request/response diffing * Support for html5 links inside Shadow DOM * New guides & examples ported from react-router big thanks to all contributors! https://github.com/metosin/reitit/blob/master/CHANGELOG.md#032-2019-05-13#2019-05-1318:06podviaznikovHi everyone. I want to show you early version of new project I'm working on. Technically it's a tool that parses markdown files and evaluates embedded Clojure code (computational markdown). Use case wise - it was made to keep personal wikis and journals. Tools is called Montaigne https://github.com/montaigneio/montaigne and and I was able to generate my personal site from it (https://podviaznikov.com/trips). Very early days for this product but I would love to hear any feedback from people#2019-05-1320:16timHey folks, I’ve just made a post about a project “Beunto” that I’ve been working on that is made with Clojure and Clojurescript https://beunto.com/tim/blog It has also been posted on HN, but doesn’t seem to be getting much traction. https://news.ycombinator.com/item?id=19902880 Check it out, thanks.#2019-05-1320:18Noah BogartI'm getting a blank screen#2019-05-1320:18eggsyntaxFYI, the blog post doesn't load for me. Firefox/Linux. Works in Chrome.#2019-05-1320:19timok thanks, yeah it’s only been tested on osx so, ill check into that#2019-05-1320:22Noah BogartI'm using Firefox on a mac too#2019-05-1320:24ghadiCan’t scroll on mobile#2019-05-1320:24emil0rGot scroll working and then it got stuck on scrolling#2019-05-1320:25emil0rOn mobile#2019-05-1320:30Lennart BuitYou seem to be after a sticky header, there are easier ways to do that. Here’s an example using css flexbox: https://jsfiddle.net/6c7jhLax/26/#2019-05-1320:33Lennart Buit(Using javascript/clojurescript/… to draw scroll bars is usually a bad idea)#2019-05-1320:40Lennart Buit(unsolicited feedback, but I hope it helps!)#2019-05-1320:54timok firefox is fixed, (took out the google font link)#2019-05-1320:57timYeah I knew the scrollbars would be controversial. I think they just need some kinks worked out, but also maybe make them optional via settings#2019-05-1321:04Lennart BuitHehe, drawing scrollbars yourself is just very hard. There is so much to do “right”, having a smooth scroll, handling keyboard events, handling touch events, correct length of the bar thingie, kinetic scrolling … you name it. Way too much work if you ask me, so I prefer to keep that task for browsers 🙂#2019-05-1321:05Lennart Buitnot to say that you can’t make a perfect scrollbar, browsers are just ridiculously good at it#2019-05-1321:07timsome of browsers (FF) have limitations/bugs for thematics/customization of scrollbars. These are logged bugs with no workarounds (at least when I made them 🙂#2019-05-1321:10Lennart Buitif theming is your concern, you are right, the web is not yet there. I am just muttering about scrollbar UX 🙂#2019-05-1321:13ghadiI think you should not mess with scrollbars#2019-05-1321:13tim🙂#2019-05-1321:13ghadieveryone here is talking about something other than your contribution#2019-05-1321:13ghadibecause they can't read it 🙂#2019-05-1321:15timyou can’t read it? Honestly I’m not having any trouble with the scrollbars that would prevent reading it.#2019-05-1321:19ghadisending you a screenshot#2019-05-1321:19ghadifirst fold is ok, but can't scroll#2019-05-1321:23timthat’s strange, i’m using 3 different browsers, on OSX right now. Looks just the same but I have no issue scrolling. hmmm.#2019-05-1321:27timahh you’re on mobile, it’s probably not detecting mobile view correctly.#2019-05-1321:28Lennart BuitYou can ask safari to behave like iOS#2019-05-1321:56tim> You can ask safari to behave like iOS Is that an extension? I’ve been using chrome dev tools for mobile devices, but obviously that’s not enough#2019-05-1405:59Lennart BuitNah, you need to enable the developer menu#2019-05-1414:16jimmyYeah, I'm sure there is some interesting stuff here, but the scroll thing makes it really frustrating to read. Even if it scrolls it stutters and jumps around. (Firefox macOS)#2019-05-1506:03jacekschaeS1 E2 - Data with Russ Olsen https://clojurescriptpodcast.com/#2019-05-1507:55valeraukojp.studist/ring-accept-language "0.1.0" has been released! it's a fork of the ring-accept middleware that handles the Accept-Language header destructuring for you. https://github.com/StudistCorporation/ring-accept-language/releases/tag/v0.1.0#2019-05-1614:08Alex Miller (Clojure team)Clojure 1.10.1-beta3 is now available https://clojure.org/community/devchangelog#_1_10_1_beta3_may_16_2019#2019-05-1617:13Alex Miller (Clojure team)FYI... if you use the Clojure JIRA system, please read: https://clojure.org/news/2019/05/16/jira-migration#2019-05-1618:17yogthos2019 Clojure/north talks are out, we're still finishing the editing so more will be showing up as they're ready https://www.youtube.com/channel/UClJshc6QtMWRqIAwJy85sfA#2019-05-1706:43artGreat job with Aviary btw, love the approach so much!#2019-05-1715:22yogthosThanks, really glad to hear it 🙂#2019-05-1810:54val_waeselynckI just published interactive docs for supdate: https://vvvvalvalval.github.io/supdate/#2019-05-1817:31eccentric JWow this approach makes a lot of sense!#2019-05-1811:16Karol WójcikHoly lambda has just been released. parrot https://github.com/FieryCod/holy-lambda Tiny integration between the AWS Lambda and the Clojure which allows you to run your lambdas either on Java Official AWS Lambda or on the Custom Native one built into the library.#2019-05-1815:55Alex Miller (Clojure team)FYI, migration of jira users, projects, and issues is now complete at https://clojure.atlassian.net#2019-05-1815:57Alex Miller (Clojure team)you can link to specific issues at links like https://clojure.atlassian.net/browse/CLJ-2504#2019-05-1815:57Alex Miller (Clojure team)redirects will be set up from old urls to new, but for the moment, still need access to the old system#2019-05-1816:00Alex Miller (Clojure team)if you have ever edited an issue in the old jira system, you should have an account tied to the email address set up in the old system (you can log in there to check what that was if needed). you can use that email and go through the forgot password process to establish a password for access. processes will be changing around filing issues (won't need an account) and gaining access. more to come on that.#2019-05-1816:01Alex Miller (Clojure team)if you see anything weird, ping me#2019-05-1816:03eccentric JNice job, this feels much better than the previous version!#2019-05-1816:05Alex Miller (Clojure team)I guess I should say for any discussion - let's take it to #clojure-dev#2019-05-1821:14devthYetibot talk from Clojure/north is up! https://yetibot.com/blog/2019-05-18-yetis-at-clojure-north#2019-05-1914:17slipsetMeta announcement: there is now #circleci for everything #2019-05-2011:33helioswhat do you mean?#2019-05-2013:36slipsetIf you have questions about anything related to CircleCI, there is now a channel for them. https://circleci.com/#2019-05-1915:28borkdudeclj-kondo (clojure linter) v2019.05.19-alpha is out! - Release info: https://github.com/borkdude/clj-kondo/releases/tag/v2019.05.19-alpha - Install via scoop on Windows: https://github.com/borkdude/clj-kondo/blob/master/doc/install.md#scoop-windows - Install via brew on Linux and MacOS: https://github.com/borkdude/clj-kondo/blob/master/doc/install.md#brew-macos-and-linux#2019-05-1919:57mauricio.szaboJust published version 0.1.3 of Atom's package Chlorine: https://github.com/mauricioszabo/atom-chlorine. On this version, supports for breaking evaluations on Clojure side, some improvements and bugfixes. Chlorine connects to a socket-repl and supports Clojure, Shadow-CLJS and Lumo. Discussions on #chlorine#2019-05-2005:19noprompt
[meander/delta "0.0.76"]
is available. The pattern matching and substitution compilers emit much better code than previous versions with more optimizations. The performance improvements are dramatic on both fronts.
#2019-05-2005:26nopromptWe’ve got a tutorial in the works with an open pull request for folks looking to learn how to use Meander in practice. I must apologize for doing a poor job on explaining the utility and philosophy of the library in the README! My primary focus has solely been on building the library itself rather than “marketing” it. Pending a release of a good tutorial and improvements to README, I’m happy to respond to questions at the project homepage and in the #meander channel. 🙂 https://github.com/noprompt/meander#2019-05-2005:32nopromptA novel addition to the latest branch of the project (`delta`) is the ability to express recursive patterns. Have a look! Give it a try! https://github.com/noprompt/meander#with#2019-05-2005:32noprompt(Send me bug reports! 😅 )#2019-05-2007:24nopromptUse 0.0.76 not 0.0.74 (just found a small bug). 😉#2019-05-2016:15blueberryhttp://aiprobook.com/deep-learning-for-programmers/#2019-05-2020:25athomasoriginalPublished a beginner friendly blog post on deploying ClojureScript to Github Pages https://betweentwoparens.com/deoploy-clojurescript-to-github-pages#2019-05-2023:20felipebarrosThank you for taking the time to write and publish this. It may seem simple but I couldn't find a similar article back in the day. I've been using Netlify ever since (found it easier to begin at the time) but using GitHub pages seems to be just as simple.#2019-05-2113:21practicalli-johnI recently did a video of using ClojureScript, figwheel-main, reagent and Bulma CSS framework for deployment on GitHub pages https://www.youtube.com/watch?v=nn_5NVgCps4&amp;list=PLy9I_IfUBzKJSgctCJaRYcnF6kZdiZ5ku&amp;index=23 Nice to see the different approaches.#2019-05-2114:21jsa-aerial@tkjoine Would 'static' here accommodate a self hosted ClojureScript site? No server, database, server side requirements, but fully 'active'#2019-05-2114:56athomasoriginalGood question. TMK it should, but maybe I am missing something.#2019-05-2115:01practicalli-johnMaybe this is another example of Serverless computing 😁#2019-05-2022:36phreed@tkjone I gave it a try and got an error.
$ clj -m cljs.main -d "demo-clojurescript-gh-pages/out"  -c demo.static-website -r
Exception in thread "main" java.io.FileNotFoundException: Could not locate cljs/main__init.class, cljs/main.clj or cljs/main.cljc on classpath.
I poked around a bit and there were some comments about issues with java 9 but I am running java 8. Any ideas?
#2019-05-2022:37athomasoriginalHey @U0XTHMGMP, what does your current folder structure look like? and what does your static_website.cljs look like? I just switched over to Java 8 and it’s still working for me.#2019-05-2022:46phreedWhat is the -d option anyway? I do not see any documentation for it. https://clojure.org/reference/deps_and_cli When I take it off things seem to work fine.#2019-05-2022:51athomasoriginalInteresting. -d is a ClojureScript compiler option: https://clojurescript.org/reference/compiler-options#output-dir allowing us to set the output dir of our compiled ClojureScript. You can check out more options at the above link, or via command line:
clj -m cljs.main -h
You can for sure remove that flag, but if you do you should not be able to see a console log in the browser console
#2019-05-2022:56athomasoriginalHaving said the above, I am able to reproduce the error your specified. It happens for me if I run the following command
clj -m cljs.main -d "demo-clojurescript-gh-pages/out"  -c demo.static-website -r
In a dir which does not have a deps.edn file
#2019-05-2022:56phreedInteresting, if the directory demo-clojurescript-gh-pages is present there is no problem.#2019-05-2022:58athomasoriginalYup. I wrote a footnote that hopefully explains this in greater detail because I figured it might not be clear https://betweentwoparens.com/deoploy-clojurescript-to-github-pages#fn-project-name#2019-05-2022:59athomasoriginalLet me know if you have any suggestions for how to make this clearer as I feel it is something that will come up more often than not. Suggestions and feedback are very welcome 🙂#2019-05-2023:00phreedIt might be good to add a { :paths ["src"] ... in the deps.edn. I think that is the default. Also from the instructions is sounds like the clj command should be run from the src/demo directory.#2019-05-2023:01athomasoriginalAwesome. That makes sense and would explain what happened to you. I will update. Thank you!#2019-05-2023:13phreedI think the actual issue was that the deps.edn file had not yet been processed successfully. The unknown -d option having prevented a successful first run. I think what did the trick was running clj -m cljs.main -h which effectively retrieved clojurescript. I then created the "missing" directory and the next run succeeded.#2019-05-2023:43athomasoriginalOh wow. That’s interesting. I cannot speak to your case, but I can say that I deleted all local versions of ClojureScript and noticed that even if I ran the clj -m cljs.main -d ... command from the correct place, it would not download ClojureScript. I then deleted each directory generated by clj (because I still had the previously generated dirs from successful runs) out, demo-clojurescript-gh-pages and .cpcache and identified that if a .cpcache directory is present, ClojureScript will never (?) be downloaded (even if it is nowhere on the local). This includes if you run clj -m cljs.main -h and also if :paths is specified in deps.edn. In your case though, I would have to know where the commands were run. Either way, I def’ learned about some interesting behaviour 🙂#2019-05-2023:50phreedMe too. Thanks.👍#2019-05-2023:51phreedI have also been looking at the --output-to option for the production build.#2019-05-2023:55athomasoriginalYeah, that’s a good one too. I will post a more “best practices aligned” version of the demo in a few days to show how I might actually configure this if I was trying to maintain a static website and not just a demo#2019-05-2113:21practicalli-johnI recently did a video of using ClojureScript, figwheel-main, reagent and Bulma CSS framework for deployment on GitHub pages https://www.youtube.com/watch?v=nn_5NVgCps4&amp;list=PLy9I_IfUBzKJSgctCJaRYcnF6kZdiZ5ku&amp;index=23 Nice to see the different approaches.#2019-05-2105:12Yehonathan SharvitI just published an article about Type Inference in Clojurescript https://blog.klipse.tech/clojure/2019/05/20/type-inference-in-clojurescript.html#2019-05-2119:24Alex Miller (Clojure team)Clojure 1.10.1-RC1 is now available. no code changes from beta3. https://clojure.org/community/devchangelog#_1_10_1_rc1_may_21_2019#2019-05-2222:20devthhttps://yetibot.com/blog/2019-05-18-karma-feature-announcement#2019-05-2310:31erdoshello, I have been working on a templating engine for office open xml (docx and pptx) documents. feedback is welcome. https://github.com/erdos/stencil#2019-05-2311:16gklijsJust took a quick look and looks like an interesting and useful project. I just found the name confusing, since with stencil I think of https://stenciljs.com/ and expecting some kind of webcomponent generator.#2019-05-2312:50henrikA 100% kudos on the project. I agree with the above, I think you can benefit from a more descriptive than metaphorical name.#2019-05-2314:01dominicmIt wouldn't be such a problem but you've not used a unique namespace#2019-05-2314:50erdoshi, thanks for the useful feedback! i start looking for an unique name.#2019-05-2315:11Joe LaneTo be clear @U2E1D7WUB, I think dominic specifically means a namespaced project like net.erdos/stencil, not a unique name like erdos-stencil.#2019-05-2315:32erdos@U0CJ19XAM i think the project identifier is fine at the moment, it is: io.github.erdos/stencil-core. however, the clojure namespaces are quite simple at the time: stencil.api, stencil.util, stencil.types, etc.. and these may collide with other libraries.#2019-05-2315:33Joe Laneahh, I’m sorry, I didn’t open up the project to check the identifier. Ignore me 🙂#2019-05-2317:12dominicmIdeally you would use something like io.github.erdos.stencil.core#2019-05-2511:53otfromThis looks very useful#2019-05-2319:11mafcocincoReleased version 0.1.0 of a channel-based interface to Kafka in Clojure (of course): https://github.com/NovoLabs/gregor#2019-05-2323:43Alex Miller (Clojure team)Released REBL 0.9.168: path, nav->, tap data, sorting https://www.patreon.com/posts/27083610#2019-05-2522:21seancorfieldnext.jdbc 1.0.0 Beta 1 -- the "next generation" of clojure.java.jdbc: a modern low-level JDBC wrapper for Clojure -- http://corfield.org/blog/2019/05/25/next-jdbc/ for the announcement. https://cljdoc.org/d/seancorfield/next.jdbc/1.0.0-beta1/doc/getting-started to get started using it. Only accretive and fixative changes will be made from this point on. All follow-up to #sql please!#2019-05-2610:46vlaaad#cljfx 1.3.0: prop map boogaloo is released! Cljfx is a declarative, functional and extensible wrapper of JavaFX inspired by better parts of react and re-frame. This release brings an ultimate extensibility system for cljfx: allowing to specify extra props, which gives you control over both lifecycle of declaratively described objects and how their changes are applied to mutable java(fx) objects. https://github.com/cljfx/cljfx/blob/master/CHANGELOG.md#130---2019-05-23#2019-05-2618:52borkdudeclj-kondo v2019.05.26-alpha! 🎉 https://github.com/borkdude/clj-kondo/releases/tag/v2019.05.26-alpha follow up in #clj-kondo#2019-05-2715:38Bingen Galartza IparragirreWe just updated the documentation, added tests and fixed some bugs for the Grafana Duct library. Here's the link if you want to checkout#2019-05-2715:38Bingen Galartza Iparragirrehttps://github.com/magnetcoop/dashboard-manager.grafana#2019-05-2816:27hlshipcom.walmartlabs/lacinia 0.33.0 and lacinia-pedestal 0.12.0 Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Featured changes in 0.33.0: - Schema Definition Language now supports empty types and extend type - Handling of nulls and omitted variables now conforms to the spec - Introspection can be disabled at schema compile time - scalars have been simplified, to conform to the spec lacinia-pedestal adds support for accessing GraphQL as an HTTP endpoint GitHub repo: https://github.com/walmartlabs/lacinia-pedestal Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/ Features changes in 0.12.0: - All GraphiQL assets are served from application, not from a CDN#2019-05-2909:16gklijs@U04VDKC4G are there any known breaking changes for lacinia-pedistal 0.11.0 -> 0.12.0. Build using it fails since the upgrade. From the test I get it's party working. Hope to have some time soon to look into it more.#2019-05-2914:27hlshipThe changes ate trivial, surprised theres a problem
#2019-05-2915:55gklijsI'll try to look into it asap, which is probably in about 14 hours from now.#2019-05-3011:55gklijsSeems like there is a type issue. When I use the endpoint not working directly in GraphiQL it does work.#2019-05-3012:28gklijsIt's fixed by explicitly casting the string to an int.#2019-05-3018:23hlshipCheck the release notes, there were breaking changes (we're still alpha) related to scalars; lacinia 0.33.0 is more strict, to be closer to the spec. On our own internal apps, I had to override the Int scalar to be more forgiving, for compatibility with existing clients.#2019-05-3018:24hlshipAt some point soon, we need to lock it down as a 1.0 release.#2019-05-3019:10gklijsI tried to find them. Also had some ID fields that I turned into Int to make it work.#2019-05-3019:28gklijsbuild is green again 🙂 https://travis-ci.com/openweb-nl/open-bank-mark/builds/113785599#2019-05-2822:10gklijsDidn't share it here before, and just updated the lacinia-pedestal version for master. https://github.com/openweb-nl/open-bank-mark contains several Clojure applications which can be end-to-end performance tested as a whole. The acquired data can be viewed in different graphs. One part is a GraphQL endpoint mainly using subscriptions, writing and reading to Kafka.#2019-05-2908:31jacekschaeS1 E4 - State with Russ Olsen https://clojurescriptpodcast.com/#2019-05-2915:42bozhidarCIDER’s documentation site got a big update https://metaredux.com/posts/2019/05/29/cider-mx-reloaded.html#2019-05-2915:51martinklepschThis nicely lays out the rationale for switching from RTD to Antora - would be curious what you found missing from cljdoc for it to be considered as an option :) #2019-05-2915:56martinklepschI assume the custom domain is a big part of it?#2019-05-2916:49bozhidarYeah, that was part of it, but the biggest part was that CIDER is not a single projects and it’s code is spread over multiple repos. I use cljdoc for everything Clojure (and I love it), but I obviously can’t deploy there docs for CIDER’s Elisp code. And more importantly - there’s no easy way to create just pull doc modules from all the repos and publish them together under some meta project.#2019-05-2916:49bozhidarI guess CIDER’s case is something pretty rare, though. Bigger projects generally have to rely on some custom sites.#2019-05-2917:58kidpolloNice! I am also happy you are using my home country’s TLD 😛#2019-05-3009:14bozhidarhttps://emacsredux.com/blog/2018/11/17/the-perfect-domain-for-emacs-projects/ 😉#2019-05-3018:02kidpolloNICE!#2019-05-2918:15mauricio.szaboJust published Atom's package to Socket REPL Chlorine, version 0.1.7. Fixed a huge (and strange bug!) on MacOSX where the package would fail to run and activate on OSX version >= 10.13. Discussions on #chlorine channel 🙂#2019-05-3015:47noprompt[meander/delta "0.0.100"] is available with some bug fixes and performance improvements. > Meander is data transformation library combining higher order functional programming with concepts from term rewriting. https://github.com/noprompt/meander https://clojars.org/meander/delta#2019-05-3015:48pezMaybe edit the post and add a sentence about what meander/delta is? I, for one, have not heard about it. 😃#2019-05-3015:57noprompt@U0ETXRFEW Done. 🙂#2019-05-3110:28borkdudecreated a #qa channel. if you want to support libraries by testing pre-release versions, go there. if you’re a library author and want QA, also go there. follow up in #qa.#2019-05-3113:24blueberryhttps://twitter.com/draganrocks/status/1134219713712721920#2019-06-0109:58borkdudeclj-kondo v2019.06.01-alpha! 🎉 major new feature: detecting unused function arguments and local bindings https://github.com/borkdude/clj-kondo/releases/tag/v2019.06.01-alpha follow up in #clj-kondo#2019-06-0118:46borkdudeas a bonus, an online clj-kondo playground: https://clj-kondo.michielborkent.nl#2019-06-0118:52vemvinteresting! https://github.com/borkdude/clj-kondo.web 404s#2019-06-0118:52borkdudeeh yeah, I didn’t push that code yet 🙂#2019-06-0118:59borkdudefixed#2019-06-0119:07Chasevery cool! it's fun seeing how quickly you are iterating on this linting project of yours. possible bug report: If I hit reset and then hit the lint button again, nothing happens.#2019-06-0119:32borkdudethanks, should be fixed now#2019-06-0306:01tatutreleased on the weekend https://github.com/tatut/drtest#2019-06-0308:02alexyakushevNew version of clj-async-profiler brings differential flamegraphs (which are useful for performance regression testing and performance tuning visibility) and a slightly improved UI. http://clojure-goes-fast.com/blog/clj-async-profiler-040/ https://github.com/clojure-goes-fast/clj-async-profiler#2019-06-0313:05mpenetNew version of tape https://github.com/mpenet/tape (codecs as option, sequential/seqable/reducible tailers, bump deps)#2019-06-0315:23Joe LaneWow @U050SC7SV, this is a great looking project. Nice job!#2019-06-0315:30mpenetThanks! It's still a bit rough around the edges (lack of docs especially) but I have been using it for a while without hiccups.#2019-06-0315:38Joe LaneIt got me to read through the chronicle queue library. Really fascinating stuff. Also, kudos on your spandex library. We have been using it in production for a while now and it’s worked very well.#2019-06-0315:38mpenet🙂 glad it helps#2019-06-0315:55mpenetI don't use the distributed version tho, for this I would go to kafka instead. But it's a great alternative to factual/durable-queue#2019-06-0315:57Joe LaneWhy do you recommend kafka instead?#2019-06-0315:58mpenetKafka is free and I expect more reliable#2019-06-0315:58mpenetdistributed/replicated chronicle queue requires the Enterprise version#2019-06-0316:11blueberry[Clojure Book WIP] Deep Learning for Programmers, New Release 0.2.0 Published http://aiprobook.com/deep-learning-for-programmers/#2019-06-0411:36metasoarousNew video out on latest Oz feature: Static site generation with live code reloading! https://www.youtube.com/watch?v=4f3fiWcNt7Y#2019-06-0411:37metasoarousAnd of course, an accompanying blog post up on the static site I just deployed using this toolkit. http://metasoarous.com/blog/oz-static-site-generation#2019-06-0411:38metasoarousFor usage, issues, etc., please see https://github.com/metasoarous/oz#2019-06-0411:38metasoarousThanks! Hope you enjoy!#2019-06-0501:19seancorfieldseancorfield/next.jdbc "1.0.0-rc1" -- fixes reflection warnings from get-connection; adds more flexibility to the result set builders, including a new next.jdbc.optional namespace providing result set map builders that omit columns with null values, per "Optionality" discussions. All follow-up to #sql -- docs https://cljdoc.org/d/seancorfield/next.jdbc/1.0.0-rc1/#2019-06-0506:19tony.kayFulcro 3 is well on its way to being production ready. Version 3.0.0-alpha-2 is on Clojars, and the README has been updated to explain how this new version is improving. Fulcro 3 uses all new namespaces. It is “nearly” source compatible with Fulcro 2, but many of the simplifications and improvements change a number of things that merited new names, and a formal porting step. This is living in an alternate repository for now, but will probably be folded back to the original when I’m done: https://github.com/fulcrologic/fulcro3#2019-06-0506:30MattiasInteresting! Being new in the ecosystem, I’d be very interested in a reflection on how Fulcro should be considered compared to alternatives - if there are any. I have found that type of information a bit hard to find, at times, so any pointer would be great. And yes, ideally I would implement something to know for myself, but, we’ll... 😅#2019-06-0507:07jacekschaehttps://clojurescriptpodcast.com/ ClojureScript Compiler with Mike Fikes#2019-06-0514:16pezI have just published a significant update of Calva, sometimes referred to as Calva 2 (or Calva dos maybe a Spanish speaking person would call it 😄). With this release I am hoping to make it super easy to start exploring Clojure and ClojureScript. Read more at ClojureVerse https://clojureverse.org/t/the-calva-journey-continues-please-jack-in/4335 Questions and comments and cheering-on welcome in #calva-dev (and/or on ClojureVerse, of course.) ❤️#2019-06-0516:42chrisnhttps://github.com/cnuernber/libpython-clj Some features include: * Python dicts are represented in java as java.util.Map's. stdout,stderr are overridden to write to *out and err, respectively. * transparent access to the python interpreter from any thread. * zero-copy pathways for numpy->tech.datatype tensors and back. So you can intermix heavy processing between clojure and python without pay a large conversion cost. * Decent performance. This is built on the raw cpython shared library so our cost of executing or interoperating with python should not be any higher than anyone else's. * two way bridging. Expose your JVM objects to python and vice versa. I have a simple keras demo where I use Keras from clojure to train a neural network included in the examples. So that proves out keras and tensorflow access from clojure. I think this soundly addresses our ability to load cutting edge math and machine learning libraries.#2019-06-0520:35metasoarousThis is amazing @chris441. Thanks so much for your work!#2019-06-0520:42martinklepschplease use threads when replying to postings in #announcements 🙂#2019-06-0618:57metasoarousSure! Didn't realize that was a thing, but makes sense for keeping the noise down. Thanks for kindly pointing it out to me.#2019-06-0619:00martinklepschNo worries! 🙂#2019-06-0615:21Alex Miller (Clojure team)Clojure 1.10.1 is now available! https://clojure.org/news/2019/06/06/clojure1-10-1#2019-06-0708:48borkdudeclj-kondo v2019.06.07-alpha! 🎉 new features: Clojure API, JSON/EDN output https://github.com/borkdude/clj-kondo/releases/tag/v2019.06.07-alpha follow up in #clj-kondo#2019-06-0711:50blueberry[Clojure Book WIP] Deep Learning for Programmers, New Release 0.3.0 Published#2019-06-0711:50blueberryhttp://aiprobook.com/deep-learning-for-programmers/#2019-06-0712:09yogthosJVM Ecosystem Survey 2019 could use some Clojure representation 🙂 https://snyk.io/blog/jvm-ecosystem-survey-2019/#2019-06-0713:25Alex Miller (Clojure team)New version of clj is now available - 1.10.1.447, just bumps the default clojure version to 1.10.1#2019-06-0713:26Alex Miller (Clojure team)There are some whitespace bugs in -h and man page. They've been fixed for next release, didn't seem worth re-releasing.#2019-06-1116:23aviI just updated to version 1.10.1.447 of the Homebrew formula, but Clojure is still reporting its version as 1.10.0:
$ brew list --versions | grep clojure
clojure 1.10.1.447
$ clojure -e "(clojure-version)"
"1.10.0"
Am I missing something? Any suggestions?
#2019-06-1116:35Alex Miller (Clojure team)if you have a deps.edn, that controls what version you are using#2019-06-1116:35Alex Miller (Clojure team)either in current dir, or ~/.clojure/deps.edn#2019-06-1116:35Alex Miller (Clojure team)the default, if none of those specify, should be 1.10.1#2019-06-1116:35Alex Miller (Clojure team)to say it another way, you can use any version of Clojure with any version of clj#2019-06-1120:01avipicard-facepalm yeah that was it. Thanks!#2019-06-0912:57pfeodrippehttps://github.com/pfeodrippe/orchardia Hack trying to improve development tooling for Arcadia, it uses code stolen and mixed from Orchard, Cider-NREPL, Compliment and Arcadia itself just modified a little bit to be usable for game development in .NET using Arcadia in conjunction with Unity. It gives autocompletion for keywords, static members, namespaces, special forms and clojure vars. It gives eldoc for static methods and clojure functions. It's supposed to be used with miracle as a plugin (emacs only), but until I figure out how to make this, you can use this from the branch https://github.com/pfeodrippe/miracle/tree/add-eldoc (which itself contains code from CIDER hopefully properly pointed out). Please, report any bug as a PR, if you want to use it outside Arcardia, be free to use and we would welcome a PR for it too 😃#2019-06-0915:28martinklepschIf you've been waiting to get a ticket for Heart of Clojure (Aug 2-3, Leuven, Belgium) now is the time: https://twitter.com/heartofclojure/status/1137740677930999808#2019-06-0915:29martinklepschI hope people don't mind this, semi-announcement here, just wanted to make sure that maybe some folks who aren't on Twitter are in the know that more tickets are available. ✌️#2019-06-1012:08OlicalConjure v0.18.0 is out! > Clojure (and ClojureScript) tooling for Neovim over a socket prepl connection.. This includes the last breaking change I had in mind, declarative prepl connections through a .conjure.edn file https://github.com/Olical/conjure If you're a Neovim user and like the idea of using socket prepls for development I'd really appreciate some feedback in #conjure. There's still so many changes I want to make but they'll be less drastic from here on out, it's mainly under the hood or quality of life until a v1.0.0 I'm happy with. Enjoy!#2019-06-1012:19pezCool stuff! I think you should have this text in the beginning of this post and at the very top of the readme: Clojure (and ClojureScript) tooling for Neovim over a socket prepl connection.#2019-06-1012:21OlicalAh, yeah, it's one of the first lines in the readme but I suppose I could put it in this message too.#2019-06-1012:21pez(I was reading from a mobile and then it wasn't immediately obvious what Conjure is.)#2019-06-1012:22pezIt could be just me, but I think it is more important than knowing that you're not on 1.0.0 yet. I would swap those two paragraphs.#2019-06-1012:23OlicalAh fair enough! I'll swap those over.#2019-06-1012:25pezI think I'll be trying this out to get some inspiration for what to focus Calva on. I'm an old vi-person, so that makes me extra curious. 😃#2019-06-1012:26OlicalOf course! I've been trying to keep up with any other similar tools, including Calva. vim-iced is another one in the vim world that's worth having a look at. I'm hoping my log buffer / configuration approach might be cool for other people to take ideas from.#2019-06-1012:26OlicalI think my ethos is a little weird too, I don't want to incur a single dependency in your project, everything required for the tooling is part of the tooling. Apart from the config file I guess...#2019-06-1012:52pezI'm not sure it's weird. I know people who has that as a requirement for using a tool.#2019-06-1013:33dharriganI've been helping to test out the plugin, works really well. Onwards and upwards!#2019-06-1016:23plexusNew blog post and accompanying library: ClojureScript logging with goog.log#2019-06-1016:23plexushttps://lambdaisland.com/blog/2019-06-10-goog-log#2019-06-1016:25martinklepschohhh! I've had this on my list for a looooong time!#2019-06-1016:26martinklepsch@U07FP7QJ0 does this support logging clojure datastructures and having them formatted with cljs devtools?#2019-06-1016:27martinklepschI can't find a mention of this but I know that @U5H74UNSF and others have been working on something in that direction#2019-06-1017:04plexusYou can, see the part about using your own handler together with identity as a formatter. Maybe that should be made easier though.#2019-06-1017:07martinklepschThat has always been an issue for me when using goog.log, could be worth highlighting this more in the announcement and mentioning cljs-devtools explicitly #2019-06-1017:13athomasoriginalThe GCL is truly a super power. It is not talked about enough so thank you for this :thumbsup:#2019-06-1017:18plexusYou're very welcome!#2019-06-1017:29samedhiKudos, well written and great for people getting started. We need more of this kind of stuff in the clojure community.#2019-06-1017:48plexus@U050TNB9F thinking about it some more I think you'll have to use your own handler which copies some of the stuff from goog.debug.Console, in particular choosing the right js/console function based on the log level. The rest is fairly trivial. I'll see if I can add that to the post and library. (I hadn't really thought about that since I'm a firefox user, so no devtools for me).#2019-06-1019:27flowthing>Giving your library a Finnish name is all the rage these days, so I’m going with Glögi (am I doing this right?). I can confirm that’s definitely a badass name.#2019-06-1022:28martinklepschOh, yes! Completely forgot you complement you on your hype-ready naming strategy! 👌🙌😂#2019-06-1109:03plexus@U050TNB9F a first version of a devtools compatible console logger https://github.com/lambdaisland/glogi/blob/master/src/lambdaisland/glogi/console.cljs#2019-06-1109:04plexusI've also expanded the post to cover how to use this in CLJC files (combine with pedestal log), and to mention devtools.#2019-06-1209:11manuel@U07FP7QJ0 minor typo here "It’s really good at what at does"#2019-06-1116:21ghadiA new release of Clojure core.async is available: Release 0.4.500 on 2019.06.11 * https://clojure.atlassian.net/browse/ASYNC-227 cljs alts! isn't non-deterministic * https://clojure.atlassian.net/browse/ASYNC-224 Fix bad putter unwrapping in channel abort * https://clojure.atlassian.net/browse/ASYNC-226 Fix bad cljs test code {org.clojure/core.async {:mvn/version "0.4.500"}}#2019-06-1207:14orestisUsing MongoDB in Clojure? Would you like to help make some improvements to the Monger library? Join the #mongo channel and start the discussion!#2019-06-1214:20blueberryhttps://dragan.rocks/articles/19/Billion-random-numbers-blink-eye-Clojure#2019-06-1305:35seancorfield{seancorfield/next.jdbc {:mvn/version "1.0.0"}} -- the "gold" release of the next generation of clojure.java.jdbc! * https://github.com/seancorfield/next-jdbc * Contains just two small usability additions over the release candidate that was available last week -- read more here: https://clojureverse.org/t/next-jdbc-1-0-0-the-gold-release/4379 * All follow-up to #sql#2019-06-1400:28seancorfield{org.clojure/core.memoize {:mvn/version "0.7.2"}} -- fixes a bug with memo-swap! and zero-arity functions -- https://github.com/clojure/core.memoize#change-log -- follow-up to #clojure -- thanks to @teemu.kaukoranta for discovering the bug!#2019-06-1409:19ikitommi[metosin/schema-tools "0.12.0"] is out. Schema-tools is a Clojure/Script library adding batteries for Plumatic Schema: walkers, schema & value transformers, Swagger / JSON Schema conversion, support for default values and more. This version add support for keyword->edn coercion for both JSON & String like already implemented in it’s companion lib, metosin/spec-tools. Download count about to hit 1M party-corgi https://clojars.org/metosin/schema-tools#2019-06-1510:59Ivan FedorovHi there, fellow clojurians! If you happen to do web-pages and you need some social meta for Twitter / Facebook etc and you want some basic cache-busting out of the box – I wrote a lib for you. Could save you 2-4 hrs. https://github.com/spacegangster/page-renderer Open for critique, feedback, etc#2019-06-1518:56blueberryhttps://twitter.com/draganrocks/status/1139969823004352512#2019-06-1616:19borkdudeclj-kondo v2019.06.16-alpha! 🎉 major new features: - unresolved symbol detection - VSCode integration (thank you @marc-omorain!) https://github.com/borkdude/clj-kondo/releases/tag/v2019.06.16-alpha follow up in #clj-kondo#2019-06-1620:00StefanVSCode integration!!! 🎉#2019-06-1710:22blueberry[Clojure book WIP - New Release 0.4.0] Deep Learning for Programmers: An Interactive Tutorial with CUDA, OpenCL, MKL-DNN, Java, and Clojure https://aiprobook.com/deep-learning-for-programmers/?release=0.4.0#2019-06-1712:40leonoelcloroutine 4 released : self-hosted clojurescript support https://github.com/leonoel/cloroutine#2019-06-1722:33nopromptThis is really neat. If you have any references, papers, etc. it’d be awesome if you could throw them in the doc/ folder or README. 🙂#2019-06-1817:08leonoelthere's clearly room for improvement here, check the announcement thread on clojureverse if you haven't already https://clojureverse.org/t/cloroutine-v1/3300#2019-06-1907:32jacekschaeClojureScript Podcast - npm interop with Thomas Heller https://clojurescriptpodcast.com/#2019-06-1915:50blueberryhttps://twitter.com/draganrocks/status/1141372265566806016#2019-06-2012:41blueberryhttps://aiprobook.com/numerical-linear-algebra-for-programmers/?release=0.1.0&amp;src=slackclojurians#2019-06-2110:45plexusA demo of using Metabase with Datomic, using the newly developed metabase-datomic driver https://youtu.be/6eLME2TZ7oU#2019-06-2201:09steveb8n@U07FP7QJ0 This is great, thank you!#2019-06-2201:09steveb8nI have a couple of questions:#2019-06-2201:10steveb8n1. does it still need an SQL connection to save dashboards etc or does it use datomic to store the config as well?#2019-06-2201:11steveb8n2. I’m using Datomic Cloud i.e. client API. I would be interested in testing/porting your work to the client API. has anyone else expressed interest in this?#2019-06-2210:51plexus1. Yes, You still need a database for metabase's own data. Typically h2/mysql/postgres. 2. So far this has been developed for a single client and uses the peer API. I can imagine there would be interest in using it with datomic cloud.#2019-06-2403:19steveb8nThanks. That’s good to know#2019-06-2110:46plexusDriver source and more info: https://github.com/lambdaisland/metabase-datomic#2019-06-2112:38bozhidarnREPL 0.7 gains native EDN transport https://metaredux.com/posts/2019/06/21/nrepl-0-7-introducing-a-native-edn-transport.html#2019-06-2216:46johnperc is a fun little library for exploring alternative anonymous function syntaxes. Adds grabbing values by key name, in addition to the existing anonymous syntax, like #%/%(Point. %:x %:y %:z) Those and more features explained here https://github.com/johnmn3/perc#2019-06-2403:25theeternalpulseif I were to do #%/%(some-fn %2:x %1y ... x) would the x be bound, or will I have to repeat the %2:x#2019-06-2404:12johnx would not be bound. You'd have to repeat %2:x, like you would with %2#2019-06-2404:15johnThe symbols don't result in bindings. They pull the values out. %:akey is pretty much translated directly into (:akey %)#2019-06-2404:16johnThough % takes on a more unique name under the covers.#2019-06-2404:57theeternalpulseso %:x %:y assume the function is passed a map {:x 1 :y 2}#2019-06-2404:57theeternalpulseI wasn't clear on if it was just positional or doing some desructuring#2019-06-2412:49johnRight. A number represents an index into arguments passed in. The key does a lookup in whatever argument is selected.#2019-06-2320:55borkdudeclj-kondo v2019.06.23-alpha! 🎉 new features: - lint .edn files - syntax checking for clojure.spec/fdef - spacemacs docs https://github.com/borkdude/clj-kondo/releases/tag/v2019.06.23-alpha follow up in #clj-kondo#2019-06-2408:55roklenarcicclj-rest-client 1.0.0 released: https://github.com/RokLenarcic/clj-rest-client#2019-06-2413:29Joe LaneHey this is pretty cool. I don’t have any uses for it right now to try it out, but I’ll look for them in the future. I’m most interested in the way you integrated spec. Nice Job!#2019-06-2415:33dpsuttonFork of kirasystems/saml20-clj clojars coordinate [dpsutton/saml20-clj "0.1.13"]. Applies a patch to honor the more restrictive ns spec for Clojure 1.10+. Was a blocker to upgrading Clojure versions.#2019-06-2423:25athomasoriginalWriting ClojureScript Apps From Scratch https://betweentwoparens.com/start-a-clojurescript-app-from-scratch…it feels so much easier than doing the equivalent in JavaScript 🙃#2019-06-2423:58BrianGreat blog name.#2019-06-2514:07Joe LaneThis is going to be the blog post I point web developers at from now on for intro to clojurescript. Fantastic job @U6GNVEWQG!#2019-06-2519:20oliyHi everyone, I am pleased to announce the release of martian 0.1.10 Martian provides an abstraction allowing you to describe the HTTP endpoints that you call without methods, urls and query parameters leaking into your application code, allowing you to work with pure Clojure data. It builds on the flexible interceptor pattern familiar to users of pedestal and supports APIs described with Swagger. Describing HTTP calls as data allows you to easily stub remote services, generate responses and add aspects such as logging and metrics. https://github.com/oliyh/martian This release adds support for: - Making your own decision about keywordising keys as per #65 (thanks @andrewmcveigh) - URI formats for strings #63 (thanks again to @andrewmcveigh)#2019-06-2614:20eccentric JPublished an article on contributing to Clojure open-source projects. I make a case for why it’s easier than contributing in other languages and also share my process to help beginners contribute. https://eccentric-j.com/blog/contributing-to-open-source.html#2019-06-2619:28andy.fingerhutcljol, some Clojure/Java code I wrote some time back to investigate the size of Java objects and how they refer to each other, inside a running JVM. Possibly useful if you are curious about memory usage of Clojure data structures, or how they are implemented internally. https://github.com/jafingerhut/cljol#2019-06-2621:24mikerod@U0CMVHBL2 this is pretty cool. Clever naming choice too (reusing the “j” across initialisms)#2019-06-2621:25mikerodIt reminds me of a time when I was trying to do hprof-analysis stuff in clj to try to have a repl-driven way to analyze heap dump data (instead of the sql-based stuff that I’ve typically seen in profiler tools)#2019-06-2621:25mikerodAt least on the surface, it almost seems I could get similar benefits out of some of this JOL stuff in the repl (no idea if that is accurate yet, haven’t looked enough). Either way, seems like an interesting lib.#2019-06-2621:30andy.fingerhutThanks! Probably best to move additional discussion somewhere else, e.g. #clojure channel.#2019-06-2708:44duncanjbrownI published a blog post about getting started with ClojureScript with the absolute bare minimum of tooling. lein and co abstract away a lot of the process and I found it interesting to try and do without: https://duncanjbrown.com/clojurescript-for-absolute-beginners/#2019-06-2715:15wilkerlucio[edn-query-language/eql "0.0.5"] is out! Now if you want to use the library without having to add the specs to the output you can do it with a closure flag, details at: https://github.com/edn-query-language/eql#removing-specs-on-clojurescript. Full change log: https://github.com/edn-query-language/eql/blob/master/CHANGELOG.md#2019-06-2715:48wilkerlucio[com.wsscode/pathom "2.2.16"] is out! Library Changes: - Support tempid? on pathom graphql config, thanks @codonnell! - Fix return of parallel timeout - Support conditional removal of specs using closure defines https://wilkerlucio.github.io/pathom/#_removing_specs_on_clojurescript Full list of changes: https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md Documentation Changes: - Add section on how to use ::pc/transform https://wilkerlucio.github.io/pathom/#connect-transform - Updated docs on batch resolvers https://wilkerlucio.github.io/pathom/#_n_1_queries_and_batch_resolvers - Update text to make it simpler to follow - Add demo on how to use pathom built-in pc/transform-batch-resolver - Add demo on how to use pathom built-in pc/transform-auto-batch#2019-06-2719:49tony.kayFulcro 3 is nearing the end of its Alpha releases and should enter Beta soon. The latest alpha is on clojars, and the new revision of the Developer’s Guide is getting close… https://clojars.org/com.fulcrologic/fulcro https://github.com/fulcrologic/fulcro3 https://github.com/fulcrologic/fulcro-developer-guide#2019-06-2722:14ricardo.ekmrestQL v3 is here! https://medium.com/@tech.relations/restql-v3-is-here-1d949c1d75f1 - Content aggregation, - Support for additional HTTP methods, - A self-healing system, - A Clojurescript/Javascript version.#2019-06-2812:35oliyHi everyone, I'm pleased to announce the release of re-graph 0.1.9. re-graph is a GraphQL client for Clojurescript with re-frame bindings and support for queries, subscriptions and mutations over websocket or HTTP. This release adds support for: - Error messages returned via the websocket transport are now piped to the callback handler in the :errors key #43 It's available now on Clojars. https://github.com/oliyh/re-graph Thanks and enjoy, Oliy#2019-06-2812:38oliyhttps://github.com/oliyh/re-graph#2019-06-2818:08nateHey everyone. We just finished up a series on the Functional Design in Clojure podcast. The series focuses on a common devops problem: getting information from log files. Our summary episode is out today: https://clojuredesign.club/episode/035-lifted-learnings/ The first episode in the series is https://clojuredesign.club/episode/028-fail-donut/ Come tell us what you think in #clojuredesign-podcast.#2019-06-2901:32Noah BogartI just discovered this podcast last week. I'm flying through them! You two are wonderful.#2019-06-2901:50nateThank you.#2019-06-2819:48greglookJust released clj-cbor 0.7.2 with a couple fixes for incremental encoding and decoding: https://github.com/greglook/clj-cbor#2019-06-2916:15borkdudeclj-kondo v2019.06.29-alpha! 🎉 https://github.com/borkdude/clj-kondo/releases/tag/v2019.06.29-alpha follow up in #clj-kondo#2019-06-3000:29seancorfieldseancorfield/clj-new 0.7.5 (tracking t.d.a build numbers) is available on Clojars -- https://github.com/seancorfield/clj-new -- also improves support for both qualified and dotted project names.#2019-06-3000:53seancorfieldseancorfield/depstar 0.2.2 is available on Clojars -- https://github.com/seancorfield/depstar -- adds -v option (to show files added to the JAR) and fixes handling of output paths#2019-07-0212:02blueberryClojure book WIP, new release 0.5.0 https://aiprobook.com/deep-learning-for-programmers/?release=0.5.0&amp;src=slack#2019-07-0308:45jacekschaeClojureScript Podcast 🎙️ will be out for summer ☀️! We’ll be back in fall with S2. If you enjoyed S1 let me know what you think! Thanks for listening! https://clojurescriptpodcast.com/#2019-07-0308:49pithyless@U8A5NMMGD The podcast was great and looking forward to S2 about tooling!#2019-07-0308:50jacekschaeGreat to hear! Thanks for listening and feedback!#2019-07-0312:51jthibaudeauI enjoyed it as well!#2019-07-0314:31jacekschaeThanks!#2019-07-0316:05MorongÖaThank you for the Podcasts. New to clojure and they help.#2019-07-0316:54jacekschae@UKE2J7BME great to hear that - which episode did you like the most?#2019-07-0404:08seancorfieldseancorfield/next.jdbc "1.0.1" https://github.com/seancorfield/next-jdbc -- mostly documentation improvements; minor reflection fix for with-transaction; more tests for transactions and save points (the focus of most of the doc changes). Follow-up to #sql#2019-07-0413:33dmaiocchicosmic-river 0.0.1 https://github.com/MalloZup/cosmic-river - first experimental version 0.0.1 released!#2019-07-0413:33martinklepschnice name #2019-07-0413:34dmaiocchithx! 🙂 I had struggling with find an appropriate with the context.. 😁#2019-07-0417:51dmaiocchiCheckout rationale and examples#2019-07-0503:02seancorfieldseancorfield/clj-new "0.7.6" -- https://github.com/seancorfield/clj-new -- supports multiple templates in a GitHub repo (suggestion by @tkjone) and conditional entries in a ->files call (suggestion by @dominicm) -- follow-up to #tools-deps#2019-07-0507:59dominicmMassive thanks to @viesti for adding Docker support to pack.alpha: https://github.com/juxt/pack.alpha#2019-07-0508:45viestithanks for your time on guiding the path @dominicm :)#2019-07-0508:36borkdudeclj-kondo v2019.07.05-alpha! 🍻 Features: faster parsing, misplaced docstrings https://github.com/borkdude/clj-kondo/releases/tag/v2019.07.05-alpha follow up in #clj-kondo#2019-07-0519:37eggsyntaxIt's not that related to clj-kondo, but since you're using the konmari metaphor, I thought you might find this tweet-thread interesting: https://mobile.twitter.com/sarahmei/status/783343170058788864#2019-07-0519:38eggsyntaxGoes beyond the "does this unit test spark joy?" joke to try to consider what the equivalent question might be for code.#2019-07-0517:58andy.fingerhutcljol (enhanced a bit since the previous announcement, and now includes a gallery of more example figures and how they were generated), some Clojure/Java code I wrote some time back to investigate the size of Java objects and how they refer to each other, inside a running JVM. Possibly useful if you are curious about memory usage of Clojure data structures, or how they are implemented internally. https://github.com/jafingerhut/cljol#2019-07-0519:08nateThis is tremendously cool. Great for learning more about the internals.#2019-07-0519:45dchelimskyCognitect Labs' aws-api 0.8.335 https://groups.google.com/forum/#!topic/clojure/I9d3xSORVMQ#2019-07-0523:43kszabo@U0ENYLGTA thanks for the newest release! It addresses some of the pain points we experienced during integrating this library. I know that you don’t accept PRs, still there are some improvements in my WIP fork that fixes issues, might be useful for some folks who can’t wait. 🙂 https://github.com/whitepages/aws-api/pull/1 Namely: - using https://github.com/ztellman/byte-streams so that the HTTP client body can be anything that is supported by the lib (open), instead of rolling your own protocol. It also removed lots of instance checking/manual type conversions in utils. - added the ability to override http client call at client + invoke site - add public endpoint to generate request map (as I think this is the primary value-add of your library along with handling of the response) - separate signing of request from sending it so HTTP client can modify headers, add custom User-Agent, etc. (also make it a client responsibility to sign so that other solutions can be used like: https://github.com/jerben/clj-aws-sign) - using a faster json parser: https://github.com/metosin/jsonista#performance#2019-07-0523:45kszaboIt’s not perfect, but I hope it gives you some ideas how some of the remaining items could be tackled. Cheers again! 🎉#2019-07-0608:35dchelimsky@U08E8UGF7 thanks for the feedback and suggestions. Decoupling request generation, signing, and even the http-client itself are all on the radar. Stay tuned!#2019-07-0522:32seancorfieldseancorfield/depstar "0.2.4" -- https://github.com/seancorfield/depstar -- includes an important security fix: if you're using 0.2.1, 0.2.2, or 0.2.3, please update to this new release! (follow-up to #tools-deps#2019-07-0604:44johnOn this Independence Day weekend, why not try out a tall glass of anonymous function syntax independence? To liberty 🍻 #%/% - johnmn3/perc Now with kwargs https://github.com/johnmn3/perc#keyword-arguments#2019-07-0604:48Alex Miller (Clojure team)I honestly don’t get why you would do that to yourself. Why not just make a fn?#2019-07-0604:56johnVerbosity of fn syntax. Concision#2019-07-0604:59johnI mean, I'm not sold on the syntax either 🙂 but I'm just betting that it's at least worth exploring#2019-07-0605:01johnIf perhaps just for fun exploration or some interesting use cases#2019-07-0605:01theeternalpulseI actually recently did something like that for ordinal argument with defaults https://gist.github.com/dantheobserver/e21b6f7fed74dca079edf2806b71791a#2019-07-0605:02theeternalpulsethough ended up not using it because it's missing the case of passing in a var rather than a vector literal. But it's always fun going down macro rabbit holes#2019-07-0605:05johnI guess I'll start a #perc channel to discuss it#2019-07-0605:55theeternalpulseOne critique is I would say is the tradeoff you make to be consice I feel makes it lose some of its clarity. I think most fns that would need to do ocmplex destructuring would be better off as a named function anyway. in most languages that support unnamed functions they have a limited and straightfoward use case (simple events, basic mapping, etc) anything more complex can be better understood as a name in place of a more complex function.#2019-07-0615:37johnBut, sometimes, when that function is a value in a map, the function already has a name, in the form of the key... why keep changing the name? Head on over to #perc for further discussion. I'm going to riff on some of the rationale over there.#2019-07-0611:15dchelimskyCognitect Labs' aws-api 0.8.342 https://groups.google.com/forum/#!topic/clojure/_Fc0__RZbss#2019-07-0619:17dchelimskyAnd, one more time ...#2019-07-0619:17dchelimsky[ANN] Cognitect Labs' aws-api 0.8.345 https://groups.google.com/forum/#!topic/clojure/BxdZUPh7_d8#2019-07-0807:08rborerirresponsible/tentacles "0.6.4" is out -- https://github.com/clj-commons/tentacles -- fixes issues with headers passing & 304 not modified responses handling#2019-07-0811:01eval2020Kind reminder that a searchable archive of this Slack-team can be found at Clojurians-Zulip: https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive If a Slack-channel is not showing up there, make sure to add @zulip-mirror-bot to said Slack-channel (ie /invite @zulip-mirror-bot). Follow-up to #community-development#2019-07-0821:17victorvoidHello guys! I'm developing a reagent library to build dynamic forms, I pushed a first experimental version, but the idea is to make a form using a literal Map where describe all fields. Suggestions are welcome! https://github.com/victorvoid/formap#2019-07-0821:24eggsyntaxNice!#2019-07-0914:49leonoelmissionary, new release with streaming support : https://github.com/leonoel/missionary follow-up : https://clojureverse.org/t/missionary-new-release-with-streaming-support-design-notes/4510#2019-07-1011:29mpenetNew version of https://github.com/mpenet/tape (minor bugfix in c.async listener api + deps upgrades)#2019-07-1011:47bozhidarA short article on downgrading CIDER https://metaredux.com/posts/2019/07/10/hard-cider-easy-downgrading.html#2019-07-1207:12plexusThank you ❤️#2019-07-1117:43Ivan Fedorovpage-renderer 0.3.1 is out. - on-dom-interactive-js JS snippet - stylesheet-async, js-module options – now support a collection of strings - Language support: provide lang param to render lang attr on the <html> tag and a HTTP-Equiv meta tag. - PWA Manifest support (a tag for the asset) - better test coverage https://github.com/spacegangster/page-renderer#2019-07-1222:10vlaaadyeet is a little helper library to yeet stuff around. you can even yoink what you yeet. https://github.com/vlaaad/yeet#2019-07-1322:02rutledgepaulvNice. I use some similar macros that also use dynamic vars so that even if there’s exception handling code in between the yeeting / yoinking the right value still gets returned (though may not interrupt all execution): impl: https://github.com/vodori/missing/blob/develop/src/missing/core.clj#L168-L192 usage: https://github.com/vodori/missing#preemptables#2019-07-1414:27jlmrjupyter-lab-parinfer is a very simple extension for Jupyter Lab enabling Parinfer for code cells: https://github.com/jelmerderonde/jupyter-lab-parinfer It is my very first public Clojure(Script) package so any and all feedback is welcome.#2019-07-1507:53blueberryhttps://dragan.rocks/articles/19/Judge-a-clojure-programming-book-by-its-cover#2019-07-1510:08sasselaMore info in #clojurebridge#2019-07-1513:58dmaiocchifor those might interested about prometheus exporter, I have builded here an experimental version with jdbc.next 🚀 https://github.com/MalloZup/hanadb_exporter_clojure (it is in a primary state yet but if people are interested, feel free)#2019-07-1516:06chrisnHey everyone! I'd like to remind you that on Thursday scicloj will have a gathering (https://twitter.com/scicloj/status/1143555279163969537) about: * https://github.com/cnuernber/libpython-clj: a way to natively access the Python runtime from Clojure * https://github.com/alanmarazzi/panthera: a pandas and numpy wrapper for Clojure built on top of libpython-clj Apart from the presentations of the libraries there will be time for open discussion, to participate please register at https://zoom.us/meeting/register/742b2abcc393765bc5b9141539e44ee6. The meeting will be recorded and then published on the scicloj YouTube channel (https://www.youtube.com/channel/UCaoZzhNzq-H7YiQczXKuXuw) so that anyone in any timezone can benefit from it. If you can't participate to the gathering but you'd like to have a question answered please post it at https://www.reddit.com/r/Clojure/comments/cdigxj/scicloj_gathering_libpythonclj_panthera/#2019-07-1518:22danielcomptonWe want to fund you to work on open source Clojure projects! 💵 Here’s what our members are looking for: https://www.clojuriststogether.org/news/q3-2019-survey-results. You can apply at https://www.clojuriststogether.org/open-source/, applications close Wednesday, July 17th, 2019 at 11:59pm PST. Let me know if you have any questions.#2019-07-1521:12seancorfieldseancorfield/next.jdbc "1.0.2" -- https://github.com/seancorfield/next-jdbc -- A new low-level Clojure wrapper for JDBC-based access to databases -- Overview of this release: * Adds support for batched execution of prepared statements: next.jdbc.prepare/execute-batch!. * Improves support for using unknown databases, especially local databases. * Improves error reporting in next.jdbc.sql. * Lots of documentation and docstring improvements! More details at https://github.com/seancorfield/next-jdbc/releases/tag/v1.0.2 Follow-up to #sql#2019-07-1604:41Huahaijuji/editscript "0.4.0" is released. EditScript is a Clojure/ClojureScript data structure diff/patch library. • Added a function to restore an EditScript from a plain Clojure vector; • Changed the definition of EditScript size to be more useful. https://github.com/juji-io/editscript#2019-07-1719:54borkdudeclj-kondo v2019.07.17-alpha! 🥳 Features: (not (empty? ...)) -> seq, deprecated var usage https://github.com/borkdude/clj-kondo/releases/tag/v2019.07.17-alpha follow up in #clj-kondo#2019-07-1800:06favilaCrinkle: A CLJS React v16.8+ un-wrapper. Use any normal one-arg function for rendering, even if its arg is a CLJS data structure (no wrapping of props needed). Also provides hooks to "memoize" values across render invocations using CLJS value equality. https://github.com/favila/crinkle#2019-07-2012:43dominicmthis is fantastic, I like your approach to converting props very much#2019-07-2012:44dominicmlooking at the approach, I imagine this is the best speed trade-off I've seen so far.#2019-07-2014:47favilaThanks! It is a bit risky because it relies on some react internals, but I really just wanted raw props#2019-07-2014:47favilaI also discovered later that the prop needs to be at least typeof object. I used a function as a prop once and it worked but react logged a warning to console#2019-07-2014:49favilaAlso for some reason the Clojars badge is reporting 1.1.0 as the latest version. It’s not, 2.0.0 is#2019-07-2014:49favilaThis is just a short list of housekeeping stuff I haven’t taken care of yet#2019-07-2020:27dominicmah, I hadn't noticed the risk yet 😛 I was just referring to the macro where you detect that it's a map literal, or do an optimized-looking shallow conversion. It's quite neat 🙂#2019-07-2020:44favilaAh ok, that stuff is for the RE macro; CE doesn’t inspect the prop at all#2019-07-1815:23genmeblog[statistics/data science] New fresh library! Fit you data to a distribution. Inference, MLE, QME and MGE methods (+ bootstrap) are supported. State: WIP/alpha. https://github.com/generateme/fitdistr#2019-07-1820:31borkdudehttps://github.com/borkdude/jet Transform JSON into EDN into Transit and vice versa. Provided as binary CLI tool, but also invokable as a CLI tool from the JVM.#2019-07-1907:55alanHey everyone! I'd like to announce panthera (https://github.com/alanmarazzi/panthera): panthera is a way to access dataframes from Clojure passing through Pandas and Numpy. At the moment is still in the alpha stage and things can and will break for a while, but I hope in a couple of weeks to release the first non-alpha version. At this stage any kind of feedback is very appreciated! 😄#2019-07-1916:20blueberryhttps://aiprobook.com/numerical-linear-algebra-for-programmers/?release=0.2.0&amp;src=cslack#2019-07-1916:20blueberryrelease 0.2.0#2019-07-2018:24wilkerluciohello friends, I'm please to announce a new website for EQL! This is a wrap up on the docs, using the http://antora.org library to generate nice documentation, proving a better user interface, also making easier for users to collaborate (quick edit buttons on pages!). Available at: http://edn-query-language.org#2019-07-2019:43dmaiocchiclojurians! today I released a 0.1.1 for missile, which is the italian word for rocket, since it is the rocketchat upstream library: https://github.com/MalloZup/missile enjoy! I used it already in my projects regularly. 🚀#2019-07-2019:44dmaiocchi(https://rocket.chat/docs/developer-guides/rest-api/#clojure)#2019-07-2023:39dmaiocchifor those who use jenkins, take a look at saint-build 0.0.1 version released! https://github.com/MalloZup/saint-build 🚀 Any help/suggestion welcome! Feel free to open issue etc. I plan to add more features in future.#2019-07-2208:45potapenkoAll JDK Classess Interop Bindings with Javadocs and Typehints https://github.com/clojure-interop/java-jdk#2019-07-2208:48jumarHas this been autogenerated?#2019-07-2208:50potapenkoYes, from javadocs#2019-07-2222:41genmeblogJust updated to 38 distributions and 10 fitting methods, https://github.com/generateme/fitdistr#2019-07-2306:40jerger_at_ddaWe proudly present data-test. A data driven testing Framework for clojure: https://github.com/DomainDrivenArchitecture/data-test#2019-07-2321:11dmaiocchiIn case anyone use a Linux distro, did rpm for clojure at openSUSE https://build.opensuse.org/package/show/devel:languages:clojure/clojure#2019-07-2402:11seancorfieldseancorfield/next.jdbc "1.0.3" -- https://github.com/seancorfield/next-jdbc -- follow-up in #sql * Adds next.jdbc.connection/->pool to make it easier to set up connection pooling with HikariCP and c3p0. The Getting Started documentation shows how to use both libraries. * Documentation improvements continue, including examples of extending ReadableColumn and SettableParameter.#2019-07-2405:32jayesh-bhootAfter a week of going through basics, my first ever project in clojure/clojurescript: A firefox addon to quickly toggle enforcement of browser-specific fonts on webpages (via Alt-Comma). Source: https://github.com/jayesh-bhoot/enforce-browser-fonts Addon: https://addons.mozilla.org/en-US/firefox/addon/enforce-browser-fonts/ Shout out to #shadow-cljs package for helping me wade through the build process. And a thank you to #beginners for solving my questions promptly.#2019-07-2405:55myguidingstarawesome! Thank you for sharing#2019-07-2416:43tony.kayFulcro 2.8.12 just released to clojars: includes some minor improvements. https://github.com/fulcrologic/fulcro#2019-07-2419:24borkdudeclj-kondo v2019.07.24-alpha! 🧹 detection of unused referred vars and more https://github.com/borkdude/clj-kondo/releases/tag/v2019.07.24-alpha follow up in #clj-kondo#2019-07-2501:05seancorfieldseancorfield/depstar "0.3.0" -- https://github.com/seancorfield/depstar -- If pom.xml is available when you build a JAR/uberjar, that POM is now used to generate MANIFEST.MF, pom.properties, and pom.xml inside the generated JAR. This makes depstar-produced JAR files more compatible with what other tools expect (I ran across the issue with http://cljdoc.org which expects that using a JAR as a :local/root dependency will expose its transitive dependencies!). Follow-up to #tools-deps or DM.#2019-07-2505:22seancorfieldworldsingles/ws-commons "0.1.2" -- https://github.com/worldsingles/commons -- Adds completable, then, exceptionally to provide sugar over Java's CompletableFuture.#2019-07-2505:34tony.kayFulcro 3.0.0-alpha-21 is now on clojars. This version continues to round out the API improvements with net abort support, cleaned up graph merge logic, and a few bug fixes. https://github.com/fulcrologic/fulcro3#2019-07-2512:14blueberryNew release 0.6.0! https://aiprobook.com/deep-learning-for-programmers/?release=0.6.0&amp;src=cslack#2019-07-2515:17oliyI'm pleased to announce re-graph 0.1.10, the Clojurescript - and now Clojure! - graphql client This release adds support for: Clojure! re-graph has been ported to cljc. Thank you @henryw374 for the initial work #47 This release fixes: Complaining about destroyed instances - thanks @iku000888 #45 https://github.com/oliyh/re-graph#2019-07-2515:52dmaiocchiIf you are looking for a remote free meetup, based mostly but not only on a europe timezone basis , on clojure but not only topics, feel free to have look at : https://github.com/just-foss/community 🚀#2019-07-2515:55dmaiocchiwe don't plan only to give talks on clojure only but it might interesting. currenlty we have 2 talks on wip, one on clojure and 1 on nix as pkg manager. but looking forward for people. it is just a learning/share movement, nothing is bound to something etc. details are in the link#2019-07-2518:08dmaiocchiiapetos prometheus client 0.1.9 released! https://github.com/clj-commons/iapetos/releases/tag/v.0.1.9 🚀#2019-07-2519:01Daniel HinesFunctional Programming is simpler, but simplicity usually is achieved by pulling things apart. What things does Functional Programming pull apart?#2019-07-2519:01andy.fingerhutMight be best to redirect follow-ups to a non-announcements channel, e.g. #off-topic#2019-07-2519:02Daniel HinesOh so sorry! THought I was in Off topic!#2019-07-2519:54Alex Miller (Clojure team)We are pleased to announce a new Q&A forum for Clojure and ClojureScript users! https://clojure.org/news/2019/07/25/clojure-forum#2019-07-2519:54Alex Miller (Clojure team)Forum: https://ask.clojure.org#2019-07-2520:32blueberry@alexmiller Looks great! Is this only for "core" clojure & contrib questions, or 3rd party libraries and tools are also welcome?#2019-07-2520:35Alex Miller (Clojure team)Go for it#2019-07-2520:37Alex Miller (Clojure team)I may add some subcategories under Other later#2019-07-2520:43blueberryI hope this Stackoverflow alternative will ameliorate the problem of invisibility due to people asking and answering most questions on slack.#2019-07-2520:47Alex Miller (Clojure team)indeed! let's move any further convo to #clojure#2019-07-2520:53Sam Ferrellwould it be appropriate to ask for recommendations on how to improve a chunk of code even if it already works?#2019-07-2521:02shaun-mahoodProbably best in #code-reviews or #beginners - definitely not in the announcements channel, though.#2019-07-2521:03Sam FerrellSorry was referring to the Q&A forum#2019-07-2521:04seancorfieldWe like folks to use threads to post follow-up questions / ask about announcements, just FYI.#2019-07-2611:51vemvspeced.def provides defn, defprotocol, fn macros with identical syntax to that of clojure.core. The difference lies in that you can pass clojure.spec specs, expressed as metadata. That metadata compiles to :pre/`:post` conditions. The key benefits are: - 1:1 mapping to clojure.core's syntax, enabling concision/DRYness, a flat learning curve, and compatibility with every IDE - specs can be inferred out of type hints, and vice versa - you can pass metadata at arbitrary levels of destructuring, so you can spec more things - jvm and clojurescript compatibility - rich error reporting, even richer than that offered by stock Expound It's been battled-tested non-stop at Nedap since February, in an increasing number of projects. Hope you find it enjoyable! https://github.com/nedap/speced.def#2019-07-2612:47Jivago Alves@U45T93RA6 Thanks for sharing. I was wondering what does it bring to the table when compared with the following libraries: - https://github.com/jeaye/orchestra - https://github.com/gnl/ghostwheel - https://github.com/Provisdom/defn-spec - https://github.com/danielcompton/defn-spec Would you mind clarifying what's the intended purpose of this one please? 🙂#2019-07-2612:50vemvty for the interest! I know those well and the difference is expressed in the key benefits summarized above. The alternatives lack at least one of: completeness (defprotocol?), reach (cljs?), efficiency (type inference?), among other stuff expressed in the readme.#2019-07-2612:51Jivago AlvesGot it. Thanks for clarifying!#2019-07-2612:54vemvHave to say, Ghostwheel has some interesting ideas, but at the same time I feel it bloats defn with features that really don't belong there, and could as well be placed somewhere else and composed later. speced.def is simple: metadata in, a prepost map out.#2019-07-2612:57Jivago AlvesI see#2019-07-2613:03eggsyntax@U45T93RA6 that is a really elegant way to incorporate inline specs. Bravo! 👏#2019-07-2615:32dmaiocchiclojure iapetos prometheus client. a project of clj-commons, merged on upstream doc of prometheus 🚀 https://github.com/prometheus/docs/pull/1405#2019-07-2619:05dchelimsky[ANN] Cognitect Labs' aws-api 0.8.352 https://groups.google.com/forum/#!topic/clojure/-PfzmhtiFrY#2019-07-2622:37Alex Miller (Clojure team)InsideClojure Journal 2019.21 - http://ask.clojure.org, tools.deps http://insideclojure.org/2019/07/26/journal/#2019-07-2712:56emil0rPut together a small library for creating plugins. Hope someone else also has a use for it: https://github.com/emil0r/ez-plugin#2019-07-2714:17eggsyntaxPlugins for what? 😉 You might want to edit your README and also your OP above to clarify that — after reading both, I still don’t know what your lib is for. I’ve done that myself, so I thought I should let you know 😉#2019-07-2714:44emil0rHmm, good point. It's meant for third party jars to plugin to an already existing system. Does that make more sense?#2019-07-2714:46eggsyntaxMaybe? — I can imagine something it might mean, but I’m not sure. What sort of already existing system? Like a Clojure project? Or is this about loading jars at runtime? Maybe an example use case would help.#2019-07-2715:14emil0rAnything really. But I think I'll add support for loading jars at runtime#2019-07-2716:52Jakub Holý (HolyJak)So editor plug-ins, pluggable transformations to config-driven transf. systém etc I guess?#2019-07-2716:57emil0rYes. Or a CMS, CRM, etc that wish to load plugins dynamically.#2019-07-2913:41robertkrahnsuitable provides "IntelliSense" for ClojureScript / JavaScript interop by using the live runtime for method / property enumeration. Figwheel and CIDER are supported right now. https://github.com/rksm/clj-suitable#2019-07-2915:38richiardiandreaThis is super! I have been thinking about it for such a long time now, thanks for the effort!#2019-07-2915:41Karol WójcikWould love to see the same thing for shadow-cljs as well 🙂 Good job @U08LZDL1H#2019-07-2916:06robertkrahnThank you 🙂 Haven't worked with shadow-cljs yet but will take a look.#2019-07-2917:17valtteriI just gave it a spin and it works like magic in Emacs. Excellent work! 🎉#2019-07-2921:51fmnoisegreat job! does it require figwheel main to be used together with cider?#2019-07-2923:28robertkrahn@U4BEW7F61 No, this should run in other repls as well. I tested it on nashorn and with weasel. All it needs for use with cider is that the cider-completion and piggieback middlewares are there - which is the default.#2019-08-0414:58Ahmed HassanWould it work if I do cider-connect-cljs?#2019-07-2919:52chrisnWe published a blog post about one specific but important tactic I used when writing libpython-clj in order to allow python to call clojure functions. I don't think this is necessary knowledge to use panthera or libpython-clj but it is a key piece to building a new binding to a C system elsewhere and just a good general piece of knowledge about how certain things work in the C world: http://techascent.com/blog/functions-across-languages.html Also, libpython-clj, the underlying tech stack, and Alan Marazzi's Panthera all have new versions out. Enjoy 🙂#2019-07-2922:25athomasoriginalI dug into Reagent Components and wrote about my journey to understanding what happens to them by the time they get to React https://betweentwoparens.com/what-the-reagent-component#2019-07-2922:27athomasoriginalInput is very welcome :hugging_face:#2019-07-3012:30dominicmthis is fantastic
#2019-08-0117:24Noah Bogart> They are not a formal syntax in the language wich you can just look up.#2019-08-0117:50Noah Bogartthis is a fantastic article#2019-08-0309:05euccastroit's nice, thanks! I have little JS background and I can't see where you explain why things are being done like that instead of in the traditional 'pseudoclassical instantiation pattern'#2019-08-0320:24athomasoriginalThat’s a good point. The reason I did not specifically address that is because my answer would be based on inference rather than providing the actual reason as to why the Reagent team went the route they did. I actually went so far as to replace the create-class implementation with the traditional pseudoclassical instantiation pattern I specified in the blog post and Reagent seemed to continue to work as is and the tests continued to pass 🤷 So based on this the best I can do is say: maybe there was/is a technical reason (google closure compiler related?)? or perhaps their implementation just worked so they went with it? Either way, I will address this in the footnotes.#2019-07-3015:49potapenkoAWS API Bindings with Docs https://github.com/clojure-interop/aws-api#2019-07-3021:02timgilbertLooks cool! It might be good to add a brief note in your README about how this compares to amazonica or Cognitect's aws-api library.#2019-08-0118:18tanzoniteblackis the code that you used to generate this available somewhere?#2019-07-3015:50potapenkoGoogle Cloud Clients API Bindings with Docs https://github.com/clojure-interop/google-cloud-clients#2019-07-3017:08cddrWe just made a new release for jackdaw A Clojure library for the Apache Kafka distributed streaming platform. https://github.com/FundingCircle/jackdaw/releases/tag/0.6.7#2019-07-3023:12dmaiocchiDoghub is out ! stalebot for GitHub V:0.0.1 https://github.com/MalloZup/doghub#2019-07-3119:19borkdudeclj-kondo v2019.07.31-alpha This version includes the ability to output analysis data which allows building custom linters and tools. Happy hacking! https://github.com/borkdude/clj-kondo/releases/tag/v2019.07.31-alpha follow up in #clj-kondo#2019-08-0118:57Ivan Fedorovpage-renderer-0.4.0-alpha is out Adds experimental simplistic service-worker generation using Workbox script. Adds api namespace. Plus a few other minor improvements. Nitpicks, ideas, critique welcome. https://github.com/spacegangster/page-renderer#2019-08-0202:13greglook📣 cljfmt 0.8.1 https://github.com/greglook/cljfmt/releases/tag/0.8.1 I forked the original weavejester/cljfmt a while ago to add additional functionality and style rules. This release includes a native-image compiled binary tool - it’s extremely fast and configurable outside of leiningen projects.#2019-08-0214:11aviThat’s compelling, I will check it out — thanks! One thought: if you’re going to be making releases, and announcing them, perhaps give it a new name?#2019-08-0304:25greglookYeah, I was thinking it might be time for that since it’s effectively a rewrite at this point. cljfmt is such a compelling name, though!#2019-08-0414:51klausharbokharbo [5:25 PM] An alpha release of Clojupyter-0.2.3 is now available on Github (branch: release/0.2.3alpha1), Clojars, and Anaconda Cloud. Highlights from Changelog.md: - Add support for conda install of Clojupyter supporting installs on Linux, MacOS, and Windows - if you have Anaconda, all you have to do is ‘conda install -c simplect clojupyter’ - Add support for using Clojupyter as a library where resulting standalone jar knows how to install itself as a Jupyter kernel (similar to lein-jupyter, but without depending on Leiningen) - Improve and extend command line interface for managing installed kernels Reports of experiences with the release - positive or negative - are much appreciated. Please report to the Clojupyter issue list. -Klaus.#2019-08-0419:30borkdudeNew release of jet, a command line tool to transform between JSON, EDN and Transit https://github.com/borkdude/jet/releases/tag/v0.0.4 New feature: queries. Update: v0.0.5 is now also released with a few updates to the query language.#2019-08-0516:02Alex Miller (Clojure team)Questions on https://ask.clojure.org now get tweeted at https://twitter.com/askclojure, so follow that if you like. There are a bunch of rss feeds on the ask site too, let me know if you need a link for some other aggregation purpose.#2019-08-0516:15akondit looks very much like stack overflow#2019-08-0517:21Alex Miller (Clojure team)yes, similar in some ways. fyi, better to move any discussion to #clojure rather than here...#2019-08-0713:48plexusNew blog post: Advice to My Younger Self https://lambdaisland.com/blog/2019-08-07-advice-to-younger-self#2019-08-0716:42dorabTo your point about Study the Great Traditions, see also https://en.wikipedia.org/wiki/Lindy_effect which says that ideas that have been around for a longer time are likely to stay around for a longer time.#2019-08-0720:06dmaiocchiI have commented the twit in the same way with lindy#2019-08-0720:06dmaiocchi😁 clj#2019-08-0719:42borkdudesorry to spam you again, this will probably be the last one this week: jet v0.0.7 is out, shipping an interactive shell for data exploration using jet-lang https://github.com/borkdude/jet/releases/tag/v0.0.7 follow up in #jet#2019-08-0722:50seancorfieldhttps://corfield.org/blog/2019/08/07/releases/ -- new (minor) releases of clj-time, jkk/honeysql, seancorfield/clj-new, seancorfield/depstar, and seancorfield/next.jdbc -- follow-up to #clojure #honeysql #tools-deps #tools-deps and #sql respectively!#2019-08-0723:40danielcomptonExcited to announce Clojurists Together is funding Shadow CLJS, CIDER, Calva, and Meander $9k each over the next 3 months - https://www.clojuriststogether.org/news/q3-2019-funding-announcement/#2019-08-0817:33Faisal HasnainOpen-source Hacker News Reader built using ClojureScript & Re-frame cljs Any feedback/contributions are most welcome 🙂 https://hackernews-app.netlify.com#2019-08-0821:50vemvnice one, with pretty sweet readability!#2019-08-0821:51Faisal Hasnainthanks alot 😊#2019-08-0821:54vemvheads up: if I'm in the middle of a comment thread, it can be hard to tell if I'm looking at a root or leave node#2019-08-0821:59Faisal Hasnainyeah, nested comments can easily become messy, do u have any ideas to simplify the nested comments and make them readable. it definitely requires some serious thought.#2019-08-0821:59Faisal HasnainI only added left margin to reflect nesting level#2019-08-0822:13vemv#2019-08-0822:13vemvI think this color difference as HN does would cut it or a single line 🙂#2019-08-1318:19Faisal Hasnaincolor difference is available on my reader as well. i think, i have not clearly understood what you mean?#2019-08-1318:19Faisal Hasnain> looking at a root or leave node Nesting does not help that to distinguish?#2019-08-1318:30vemv> . i think, i have not clearly understood what you mean? I mean, in my screenshot there's a white zone and a beige zone. that helps me identifying the root nodes. > Nesting does not help that to distinguish? up to a point 🙂#2019-08-1318:32Faisal HasnainI have also used colors.#2019-08-1318:33Faisal Hasnainhere on left, you see appended extra white space for nested comments, to distinguish root vs leaf nodes#2019-08-1318:33Faisal Hasnainor you mean something else?#2019-08-1318:40vemv#2019-08-1318:40vemvHere, how do you know the Slightly off topic but (nearly) two years ago my father had a bad stoke. comment is a root comment? it could be a child of a larger comment#2019-08-1318:50Faisal Hasnainyeah, now i get that. yeah, on larger screen its adding extra space on both side, so making it hard to distinguish between these two.#2019-08-1318:54Faisal Hasnainso i have two ideas, one is to to move the root comments to extreme left to, and other idea is to show slightly different color for root comments. what do you say? i lean to former than later#2019-08-1319:09vemvpersonally I like how HN does it. which is similar to how Soundcloud (a more modern example) does it#2019-08-1319:16Faisal Hasnaini have pushed an update, refresh now and let me know does it solve the problem?#2019-08-1319:18vemvchecked, seems to do the job! 🍻#2019-08-1319:19Faisal Hasnain#2019-08-1319:19Faisal Hasnainthanks for your feedback 🤝#2019-08-1319:22vemvbtw, vertical whitespace seems quite condensed#2019-08-1319:22vemv#2019-08-1319:23vemv#2019-08-1319:23vemv(I'm open to be convinced) only stands out in the original#2019-08-1319:24Faisal Hasnainurl?#2019-08-1319:25vemvhttps://news.ycombinator.com/item?id=20687542#2019-08-1319:29Faisal Hasnaini mean share url from hacker-news app#2019-08-1319:31vemvhttps://hackernews-app.netlify.com/top/20686945#2019-08-1319:35Faisal Hasnaini am using hnpwa api which give pre generated html#2019-08-1319:35Faisal Hasnaini am not doing any custom styling#2019-08-1319:37Faisal Hasnaini think it appears same as on HN, only line spacing might be little bit different#2019-08-1319:37Faisal Hasnainor you mean to point something else? 🙂#2019-08-1319:43vemvadding this rule seems to make both screenshots more similar#2019-08-1319:43vemv#2019-08-1319:49Faisal HasnainGot it 👍 Will apply fix soon#2019-08-1409:34Faisal Hasnainpushed the fix 🎉#2019-08-1409:37vemvlooks legit to me 🤝#2019-08-1409:37Faisal HasnainThanks for feedback 🤝#2019-08-0818:48wilkerlucio[nubank/workspaces "1.0.10"] is out! This version improves the tab styles, fixing width and allowing more tabs to be visible at once. https://github.com/nubank/workspaces#2019-08-0908:29DaveThis looks super cool#2019-08-0911:57plexushttps://lambdaisland.com/blog/2019-08-09-fork-this-conference#2019-08-0912:18dmaiocchiForked and starred 😁#2019-08-0914:04borkdudebabashka: a pure, fast and (severely!) limited version of Clojure in Clojure for shell scripting. https://github.com/borkdude/babashka#2019-08-0914:20heliosyou're on 🔥 😄#2019-08-0914:22dominicmHow does it compare to Janet?#2019-08-0914:25borkdudeI don't know janet, but this is very very minimal, I just hacked it together in an hour or so#2019-08-0914:43dominicmYou might like janet Lang#2019-08-0914:55Jivago Alves@U04V15CAJ Have you seen https://github.com/candid82/joker ? Just curious about the similarities / differences.#2019-08-0915:06borkdudejoker is much more mature and evolved#2019-08-0915:07pezSeems like you are trying to say this is very limited and in its infancy? 😎#2019-08-0916:44borkdudeyes, that's what I was saying 😎#2019-08-0918:05borkdudeadded a clarification of how this might be used: https://github.com/borkdude/babashka#rationale#2019-08-0920:16eccentric JIs this like an alternate to closh?#2019-08-0921:27borkdudeit's not a shell, so I guess no#2019-08-0921:41borkdudeI added closh to the README now, thanks @U8WFYMFRU#2019-08-0915:16OlicalI've just released the first version of Propel https://github.com/Olical/propel it helps you start Clojure and ClojureScript REPLs with a prepl attached. Including figwheel! It's got an easy to use CLI as well as a couple of functions you can call from your own main function. It's intended to be used in conjunction with tools such as Conjure https://github.com/Olical/conjure This example command will drop you into a node ClojureScript REPL with a prepl on a random port.
clj -Sdeps '{:deps {olical/propel {:mvn/version "1.0.0"}}}' -m propel.main -e node
#2019-08-1013:42JakubClosh 0.4.1 is out. This is a bugfix release containing fixes mostly around current working directory as well as fixing compatibility with Java 11. Grab the uberjar from the releases page and give it a try: https://github.com/dundalek/closh/releases/tag/v0.4.1#2019-08-1015:53Alex Miller (Clojure team)InsideClojure Journal 2019.22 - spec updates, tools.deps http://insideclojure.org/2019/08/10/journal/ (discussion to #clojure-spec or #tools-deps as appropriate please)#2019-08-1018:12borkdudebb 0.0.4 (a tiny version of Clojure for use in combination with bash, and maybe a gateway drug to @kloud's Closh ;-)) now has all the pure functions from Clojure https://github.com/borkdude/babashka follow up in #babashka#2019-08-1022:19blueberrySetting Up Neanderthal with REBL and Cursive http://www.arachnid.co.nz/blog/neanderthalrebl#2019-08-1118:54borkdudepulled this out of babashka: https://github.com/borkdude/sci#2019-08-1320:56nonrecursivehey y’all, I wrote a blog post: Frameworks and Why (Clojure) Programmers Need Them http://flyingmachinestudios.com/programming/why-programmers-need-frameworks/#2019-08-1321:05Alex Miller (Clojure team)I had such a negative reaction to the first sentence, I can't bring myself to read it. Seems totally unnecessary.#2019-08-1321:13nonrecursivehey Alex - thank you very much for this feedback 🙂 I’ve updated the post to use more neutral language and to not sound as if I can speak for the entire clojure community. I’ll respond more on reddit to keep the convo in one place#2019-08-1321:14Alex Miller (Clojure team)thanks#2019-08-1321:15vemv> I had such a negative reaction to the first sentence, Personally I didn't, maybe influenced by prior writing by Daniel (i.e. I know his writing is intended to be funny and lighthearted) But I also can see how that particular sentence might catch people off-guard.#2019-08-1321:51eccentric JFrameworks that emphasize breaking things down into common data structures that I can manipulate with simple functions are great. I feel where it gets messy is when they introduce bespoke vocabulary that only reflect the author's perception of the problem they are trying to solve. That's what lost my interest in Phoenix in Elixir. It may not have classes\objects, but it also introduces extra vocabulary like Plugs which share no principles and can only be learned through extensive doc reading. What I love about a library like Ring is that I barely had to read the docs. I also don't have to think about which version of ring a handler is using because it's just a function that receives a request hash-map and returns a response hash-map.#2019-08-1400:48nopromptI think the it’s just a position is a reductionist posture that contributes little to a conversation like this. It rubs me as dismissive to the propositions being advanced without actually addressing them.#2019-08-1400:58nopromptTo be clear, the first portion of that remark is fine (with me). I’m just picking on the second cause I see it so often.#2019-08-1401:05nopromptFWIW I think a better way to frame these discussions is with respect to specific contexts. It’s not “Why” it’s “When”.#2019-08-1401:08nonrecursivethe most striking thing to me about frameworks is that they’re so successful, in the sense that they’re widely used and people make a ton of money with the products built with the frameworks#2019-08-1401:24nopromptI had a great experience with Ruby and Rails not too long ago at a Clojure/Ruby shop. Even though I’m equally proficient in both languages, I found that the process of updating application code in a Rails application was generally more efficient than a Clojure one. Personally, the value of “convention” is hard to devalue in a setting where you have to work with other people. Conventions are great for teams.#2019-08-1401:41eccentric J@U06MDAPTP I’m not quite following. What’s a reductionist posture? #2019-08-1401:50noprompt@U8WFYMFRU> it’s just a function that receives a request hash-map and returns a response hash-map This ☝️#2019-08-1401:53eccentric J@U06MDAPTP I see, what makes it reductionist though? What bigger idea am I reducing?#2019-08-1402:05noprompt@U8WFYMFRU the structure of it. The appeal to the virtuous nature of a Ring handler being so simple because, look, it’s just these three simple bits.#2019-08-1402:26eccentric J@U06MDAPTP is that wrong? I am not suggesting frameworks are bad, I agree with the article that they shouldn’t be a dirty word. However, I do have some thoughts on what can make a framework more appealing to me. Perhaps a stronger point is that I prefer learning frameworks that apply to a lot more than itself. For instance learning Ring I learned how to setup a simple middleware pattern with composition and how to model a complex problem such as request handling, into pure, data-driven functions. That is drastically different than my ongoing 4 – 5 years with Django where most of what I learned only applies to Django itself. Some of which doesn’t even carry between versions of Django. For instance how you access headers from a Django request class instance changes between 1.11 and 2.0. In Ring, you don’t have that problem. If the community builds frameworks that play nicely with FP concepts and the principles Clojurians typically embrace, I think they may come around.#2019-08-1402:31noprompt@U8WFYMFRU I do not think it is wrong. I felt like it was misplaced in the context and that statements with a similar structure in philosophical Clojure discussions [to me] are not contributive. I followed that up because I wanted to clarify that I thought your other remarks were fine. I mean no harm.#2019-08-1402:35nopromptI also agree that “framework” shouldn’t be a word we use pejoratively in Clojure.#2019-08-1402:40eccentric J@U06MDAPTP I don’t feel you were trying to cause harm. Was curious if I misrepresented what I was trying to say, if I said something stupid, or there was room to refine it into something more meaningful. After talking I do see your point and will be more mindful of that in the future. 😀#2019-08-1402:42noprompt@U8WFYMFRU cool. And, in your defense, I was a tad hyperbolic. 😅#2019-08-1402:57nopromptTo the topic at hand, I think another benefit of using a framework is that it often alleviates you from having to make some decisions up front. For someone that wants to build an MVP that can be huge (suspending for the moment the disasters an emphasis on an MVP can bring about). Of course, a framework isn’t the only thing that can do that right? lein new <template> can do this but I’m not talking about that. I’m talking about structural decisions and conventions.#2019-08-1403:01nopromptTake re-frame for example. At its core, its really just an event handling and state management library. We could put those bits together in a number of different ways, sure. So what? Its the conventions of re-frame which make it so useful to the community at large. It gives people an opportunity to get to the part where they can start building shit without having to hack together their own architecture while they build their application.#2019-08-1403:05nopromptAnd its that last part that really resonates with me and why I think frameworks organized around conventions are nice. I’ve now worked for 4 companies seriously using Clojure to build both back and front end applications and I can tell you that, apart from the common libraries they use, I’ve seen many of them architected similarly but each with subtle twists. Those differences are so annoyingly common that think at this point in my Clojure career, I would love to see a framework with broad support in the community.#2019-08-1322:24borkdudebb 0.0.7 released: https://twitter.com/borkdude/status/116140284106138419 for future updates this week, look in the thread. follow up in #babashka#2019-08-1407:00helios👍 this channel is slowly turning into #borkdude-releases 😛#2019-08-1507:37borkdudeI'll post updates in this thread to not overwhelm people.#2019-08-1507:37borkdudehttps://github.com/borkdude/babashka/releases/tag/v0.0.8#2019-08-1416:09LuSome feedback on this would be great and much appreciated 🙂#2019-08-1523:08Adam HelinsHey guys ! I have been working on some MIDI visualizations of piano music lately and it turns out Clojure is really pretty sweet for doing that sort of things. I will certainly open-source at least some parts when it becomes a bit more serious but meanwhile I would be keen to know if some of you have already attempted something similar or would be interested to provide some pre-alpha feedback. Feel free to PM me. Here is an example : https://www.youtube.com/watch?v=-R6Wwejoc80#2019-08-1603:53wilkerlucioHello people, today I like to announce a few updates on Pathom. First [com.wsscode/pathom "2.2.23"] is out! This is a highly recommended release for all users; this version fixes a few error scenarios that could get the parser stuck. You can see the full changelog at https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md However, there is more! I've been working on a new format for the documentation, moving from one big file to many pages. On top of that some content is changing both in organization and text. You can preview the new docs at https://wilkerlucio.github.io/pathom/v2. This version is also friendlier for collaboration; each page contains a button at the that gets you directly in Github to edit that page. So don't shy away, if you spot something wrong; I invite you to try the button and send a fix! I hope you enjoy the new format!#2019-08-1617:11hlshipcom.walmartlabs/lacinia 0.34.0 Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Featured changes in 0.34.0: - Improvements to the preview API - Improvements to REPL-oriented development - Other bug fixes#2019-08-1621:04borkdudejet 0.0.8 released with support for streaming: https://github.com/borkdude/jet#streaming#2019-08-1810:57borkdudebb v0.0.9: https://github.com/borkdude/babashka/releases/tag/v0.0.9
$ bb --time '(-> "." io/file .getAbsoluteFile .getParentFile .getParentFile str)'
"/Users/borkdude/dev/clojure"
bb took 2ms.
happy bashing!
#2019-08-1819:17Karol Wójcikholy-lambda v0.0.7 https://github.com/FieryCod/holy-lambda/releases/tag/0.0.7 Contributions more than welcome 🙂 I found one bug especially annoying if someone is interested in helping https://github.com/FieryCod/holy-lambda/issues/12#2019-08-2008:56borkdudejet v0.0.9 is released. added the --collect option to collect multiple values from stdin into a vector. https://github.com/borkdude/jet/releases/tag/v0.0.9 Also added an installer script:
$ bash <(curl -s )
$ echo '{:a 1}' | jet --to json
{"a":1}
#2019-08-2014:21blueberryNew Release 0.7.0 https://aiprobook.com/deep-learning-for-programmers/?release=0.7.0&amp;src=sclojure#2019-08-2022:08mauricio.szaboJust published Chlorine, Atom package for Clojure and ClojureScript (connecting to a Socket REPL) version 0.1.11. On this version, multiple bug fixes, rendering code to more UNREPL objects, and allowing users to test experimental features too! Discussions on #chlorine channel.#2019-08-2115:59borkdudeclj-kondo v2019.08.21-alpha Support for potemkin/import-vars, contributions from people @ #heartofclojure and more. https://github.com/borkdude/clj-kondo/releases/tag/v2019.08.21-alpha follow up in #clj-kondo#2019-08-2119:19welphello all! i am working on a mobile Clojure editor. i am not quite ready to release it yet, but wanted to share my progress. let me know what you think! https://colortree.app#2019-08-2119:30Joe LaneHey @UCEA616KC , happy to see you kept working on colortree since the http://clojure.mn meetup!#2019-08-2119:31Joe Lane(They like to keep replies in thread here)#2019-08-2119:31martinklepschThanks Joe 🙂#2019-08-2119:31pezI repeat what I said on Reddit: If you need a beta tester, I'd love to help with that.#2019-08-2119:31martinklepsch@UCEA616KC this looks very cool, in fact somebody excitedly showed me some videos that you posted to twitter.#2019-08-2119:33welpHey Joe, I did! That was such a great time for me!#2019-08-2119:35Joe LaneYou're always welcome back. If you're willing to do the drive (or remote!?) we'd happily take a presentation on colortree!#2019-08-2119:35welp@U0ETXRFEW that is so awesome to hear! Thank you, I will take you up on that#2019-08-2119:36welp@U050TNB9F that's really really cool to me#2019-08-2119:39welp@U0CJ19XAM i am planning on coming to the next one!#2019-08-2121:37Joe Lane/sigh... Thanks, we usually post things on meetup.#2019-08-2120:41Alex Miller (Clojure team)clj 1.10.1.469 and tools.deps.alpha 0.7.541 are now available#2019-08-2120:41Alex Miller (Clojure team)
- FIX: exclusions were not canonicalized and could fail to match and exclude
- PERF: cache Maven session and use Maven session cache
- FIX: Remove slf4j-nop as dependency of tools.deps.alpha
#2019-08-2212:07borkdudehttps://github.com/borkdude/jet/releases/tag/v0.0.10#2019-08-2218:39slipsetJust created #grokking-simplicity simplicity if anyone wants to discuss the book there.#2019-08-3111:26Jakub Holý (HolyJak)Hm, now I'm forced to progress from having bought the book to actually start reading it 😊#2019-08-2218:41nathanmarzWe've released a small open source project (authored by @bhauman) for easily defining custom exception types in Clojure. It's also a great example of how to do explicit bytecode generation. https://github.com/redplanetlabs/defexception#2019-08-2218:44nateHey, not sure if this the right place to post this but I just wrote an article on how we're using ClojureScript to implement Google Cloud Functions, any feedback is welcome! https://medium.com/multis/serverless-email-notifications-with-google-cloud-functions-and-clojurescript-fc58dfea067#2019-08-2218:55pezI think this is a good place to tell about this. But there is also #news-and-articles , just FYI. 😍#2019-08-2219:01nateOh cool, didn't know about it, thanks 🙌#2019-08-2722:50pabloreOk I’m very interested in that color theme of yours#2019-08-3114:56nate@U7V9HE682 it's https://monokai.pro with Spectrum filter#2019-08-2313:17Suni Masunohttps://blog.cleancoder.com/uncle-bob/2019/08/22/WhyClojure.html#2019-08-2313:31StefanWise man! 🙂#2019-08-2316:05pezI love his writing style.#2019-08-2909:54MnoYay uncle Bob!#2019-08-2313:17Suni MasunoIn case we have any uncle bob fans here.#2019-08-2319:24klausharboClojupyter 0.2.3 released Clojupyter-0.2.3 is now available on Github, Clojars, and Anaconda Cloud. Highlights from Changelog.md: - Add support for conda install of Clojupyter supporting installs on Linux, MacOS, and Windows - if you have Anaconda, all you have to do is conda install -c simplect clojupyter - Add support for using Clojupyter as a library where resulting standalone jar knows how to install itself as a Jupyter kernel (similar to lein-jupyter, but without depending on Leiningen) - Improve and extend command line interface for managing installed kernels Reports of experiences with the release - positive or negative - are much appreciated. Please report to the Clojupyter issue list.#2019-08-2414:27plexusThe Heart of Clojure videos are now online https://www.youtube.com/playlist?list=PLhYmIiHOMWoEgJEvgkmUe8D0agxy_T2vR#2019-08-2505:41mike_ananevFork of Cambada is released. https://github.com/mikeananev/cambada - fixed projects build error with deps defined as :local/root.#2019-08-2608:02promesanteThe Fullstack Tutorial for GraphQL, https://www.howtographql.com/, ported from Javascript to Clojure/script: Blog post: https://promesante.github.io/2019/08/14/clojure_graphql_fullstack_learning_project_part_1.html Source code GitHub repo: https://github.com/promesante/hn-clj-pedestal-re-frame Suggestions and corrections, more than welcome. Hope it to be useful for anyone interested.#2019-08-2608:18gklijsWill certainly take a look, and might refer to it in my presentation at GraphQL summit.#2019-08-2608:22promesante👍#2019-08-2611:18blueberryhttps://dragan.rocks/articles/19/Fast-tensors-Clojure-sneak-peek?src=cslack#2019-08-2623:09athomasoriginalWriting clojurescript from scratch felt lonely so I wrote a little something about setting up a ClojureScript test toolchain with figwheel + cljs.test + jsdom https://betweentwoparens.com/clojurescript-test-setup#2019-08-2623:10athomasoriginalAs always, comments are most welcome :hugging_face:#2019-08-2716:07borkdudeedamame: EDN parser with location metadata and pluggable dispatch table https://github.com/borkdude/edamame follow up in a thread to this post.#2019-08-2716:07borkdude^ @U09LZR36F#2019-08-2716:08dominicm❤️#2019-08-2716:10Alex Miller (Clojure team)Good name :)#2019-08-2716:12dominicmBit cheesy, :drum_with_drumsticks:#2019-08-2804:47markusThis looks really cool. I imagine it would be a good library to use for making a compiler for a Clojure like language in Clojure, where it would be important to be able to give good information about the location of errors. What is the use case you had in mind?#2019-08-2806:00borkdudeThat’s exactly the use case for me. Take a look at sci: https://github.com/borkdude/sci#2019-08-2806:01borkdudeBut it can also be useful for providing error messages about EDN config files#2019-08-2806:12borkdude@U89UL6P9P sci is used in babashka which since yesterday has errors with locations: https://github.com/borkdude/babashka#2019-08-2807:54markusVery cool 🙂#2019-08-2811:21mpenetLightweight wrapper for CompletableFuture -> https://github.com/mpenet/auspex#2019-08-2812:12ikitommiComparison to promesa would be great, as it also uses CompletableFuture on the JVM.#2019-08-2812:13ikitommi(and works on cljs)#2019-08-2812:41mpenetdifferent semantics (api), no dynamic vars, default execution context differ also. I am also personally not interested in cljs compatibility.#2019-08-2812:48mpenetOtherwise they are quite similar, tbh I also didn't know promesa was using CompletableFuture. Checking the code I'd say auspex is also much less code. It's just a collection of stuff I was using per project put together with a couple of helpers.#2019-08-2812:50ikitommiSimplicity (and performance) is good. Many api flavors: manifold-like (auspex), java-like (https://github.com/worldsingles/commons), promise-like (promesa) ja quick-hack (https://github.com/metosin/porsas/blob/master/src/porsas/async.clj#L168-L190) 🙂#2019-08-2812:53mpenetyeah that's what I was doing too. Having manifold.deferred/chain and manifold.deferred/loop+recur is the real plus in auspex imho. Even tho chain is just reduction over then. CompletableFutures are quite cool#2019-08-2812:55ikitommiGood thing is that if the libraries emit CFs, you can compose them easily, without locking to a libraryX. Pick the one you like. E.g. pohjavirta has response mappings for CompletionStage so all of those libs just work with it.#2019-08-2812:55mpenetexactly#2019-08-2812:56mpenetor just copy paste the bits you like, it's little code#2019-08-2812:56ikitommi👍#2019-08-2813:50Alex Miller (Clojure team)The Clojure/conj 2019 CFP is currently open and we'd love to see some more submissions about interesting Clojure projects, or practices, or even just topics of interest to Clojure programmers. As much as being a conference about Clojure, it is also a conference about ideas. If you have any questions, feel free to ask in #clojure-conj. Submission info here: http://2019.clojure-conj.org/call-for-proposals/#2019-08-2818:56bherrmannWould be nice to hear about running clojure using graaalvm on the raspberry pi 4 - is there a place to suggest talks that attendees wold like to hear? or do I have the cart in front of the horse?#2019-09-3018:32petterik@U064X3EF3 The submit a proposal link button is broken?
This form is currently private and cannot be viewed by the public.
#2019-09-3018:33petterikOh sorry, this was a month ago.#2019-09-3018:35Alex Miller (Clojure team)yep, too late! :)#2019-08-2918:11borkdudeAdded support for SIGPIPE to babashka which allows you pass infinite colls over process boundaries:
$ bb -O '(range)' | bb -IO '(drop 10 *in*)' | bb -I '(take 2 *in*)'
(10 11)
https://github.com/borkdude/babashka/releases/tag/v0.0.13 follow up in #babashka
#2019-08-3108:04Ivan FedorovLooked at execution times https://gph.is/1nur1oW#2019-08-3003:14tony.kayFulcro 3 is well into the Beta phase. Fulcrologic consulting has ported one large app with success, and resolved a number of minor issues. Beta 12 is on clojars https://github.com/fulcrologic/fulcro#2019-08-3015:40Daniel Leong(Yet another) css-modules in clojurescript library I’ve been working on: https://github.com/dhleong/spade#2019-09-0122:10thelittlesipperExquisite! Well done! This library has what I felt was missing from cljs-css-modules. I would just suggest that you add the require statement i.e. (:require [spade.core :refer [defclass ...]]) to the readme so that it's even more beginner friendly 🙂#2019-09-0312:01Daniel LeongThanks! Happy you like it! Good idea on the README as well#2019-08-3108:11Ivan Fedorovpage-renderer 0.4.0 is out of alpha. Service worker generation showing itself well. For Java 9+ users – also improves cache-busting, which is now [finally] based on hashing. For some web-apps – that could be the fastest way to mobile devices [via PWA] and laptops [via Chrome apps]. https://github.com/spacegangster/page-renderer#2019-08-3119:24borkdudebabashka v0.0.14: socket REPL! https://github.com/borkdude/babashka/#socket-repl#2019-09-0119:32ahungryhttps://github.com/ahungry/xdg-rc#2019-09-0120:18dominicmCool, did you see directories-jvm?#2019-09-0120:18dominicmIt has Windows support for example#2019-09-0122:56ahungryI hadn't, ill look. Ty#2019-09-0121:24tony.kayFulcro 3 Beta 13 is on Clojars, and the template has been updated to ensure that Fulcro 2 does not appear on the classpath. This should make it a bit easier for beginners to keep things straight: https://github.com/fulcrologic/fulcro-template#2019-09-0207:59schmeeAnnouncing Daguerreo, a task execution library! > Daguerreo is a library to create workflows using tasks. It takes care of dependency resolution, parallellism, retries and timeouts and let’s you focus on your business logic. It shares the basic structure of other task execution libraries such as Airflow or Luigi, but unlike those it is meant to be embedded in your application rather than run as a standalone service. https://github.com/schmee/daguerreo/#2019-09-0211:43kszaboAny plans to add checkpointing/handling process failures?#2019-09-0212:01schmeeNot sure what you mean by that, but I’m certainly open to feature requests/suggestions 🙂 If you’re interested, please open an issue describing what you’re looking for and maybe an example use-case! 🙏#2019-09-0212:01schmeeI guess checkpointing = restart the job from “in the middle” to avoid redoing a bunch of work?#2019-09-0212:04kszaboyes, of course for that you will need a pluggable persistent storage for checkpoints#2019-09-0212:07kszaboI looked at http://andrewberls.com/blog/post/introducing-overseer--data-pipeline-management-in-clojure-pt-1 before in this space in Clojure#2019-09-0212:08kszabothis looks like a single-process version of it, without any process-level execution guarantees (ie. if I kill the running DAG, I have to handle resuming it somehow)#2019-09-0212:12schmeecorrect, because of that it is not really suited for really long-running workflows (e.g big data-crunching jobs)#2019-09-0212:13schmeethe sweet spot for Daguerreo in it’s current state is when you have lots of smaller tasks that interact with each other in complex ways, but the overall time of the job is “short”, for some definition of short#2019-09-0212:19kszabomakes sense, beats a hardcoded AST for sure 🙂 thanks!#2019-09-0212:20kszabo> correct, because of that it is not really suited for really long-running workflows (e.g big data-crunching jobs) but if this is intended then the comparison with Airflow and similar tools that fit this niche is unfair IMO#2019-09-0212:22schmeethe comparison is not meant to imply “Daguerreo matches the features of these libraries”, but “if you are familiar with these libraries, it will help you understand Daguerreo faster”. I’ll re-phrase it and add some more in-depth comparisons on how they differ, thanks for the feedback! :thumbsup:#2019-09-0508:32leonoelI don't quite understand why did you choose not to rely on jvm thread interruption mechanism#2019-09-0508:36leonoelif correctly implemented, blocking calls such as Thread/sleep support cancellation via Thread/interrupt, and polling is supported as well via Thread/isInterrupted#2019-09-0518:25schmee@U053XQP4S the reason is partly that I don’t want to expose users to old-school Java threading details, and partly that there are lots of libraries that don’t handle interrupts properly anyway. So my choice was to make it explicit and force the user to handle it rather than relying on a potentially shaky, more implicit solution. The current solution can also be modified to handle interrupts if I ever want to go down that road (I think :D). So that the reasoning, whether it’s good or not I’m actually not sure myself 🙂#2019-09-0518:25schmeeI’m looking forward to playing with Missionary in an upcoming project btw, it looks really cool! 🙂#2019-09-0519:16leonoelthat makes sense, however I find useful to have a way to be actively notified of cancellation (in addition to passive polling), for instance by attaching a callback to the token#2019-09-0519:19schmeeagree, that’s something I overlooked in the initial release. Would an on-complete callback suffice you think? then you can check the completion status in the callback and handle it, or hook it up to something like Manifold can work with deffereds instead#2019-09-0519:26leonoela callback looks like the most flexible solution to me, you can hook up to anything supporting cancellation, including a nested job and even Thread/interrupt#2019-09-0519:33leonoelBTW you can make it a non-breaking change if you implement it on the arity 1 of is-active? 😉#2019-09-0214:42darwinDirac v1.4.0 is out. Featuring initial Figwheel Main integration. Give it a spin: https://github.com/binaryage/dirac/tree/master/examples/figwheel-main#2019-09-0305:06Candidjoker v0.12.7 is out: https://github.com/candid82/joker/releases/tag/v0.12.7#2019-09-0314:36plexushttps://lambdaisland.com/blog/2019-09-03-streaming-sessions-thursday-friday#2019-09-0315:38blueberryNew Release 0.8.0 sheepy https://aiprobook.com/deep-learning-for-programmers?release=0.8.0&amp;src=cslack#2019-09-0406:00jacekschaeClojureScript Podcast is back with Season 2 - in the first episode we are talking with @shaunlebron about lisp editing - https://clojurescriptpodcast.com/#2019-09-0506:35StefanI listened to it this morning in the car, very nice. I could actually follow the auditory explanation of the visual stuff pretty well, so well done. I heard, I think in the context of vim/fireplace, something like “cocoon” mentioned. What is that exactly? @U8A5NMMGD#2019-09-0911:57jacekschae@shaunlebron would you have more directions when it comes to “cocoon”?#2019-09-0412:57borkdudeI'm happy to announce this new release of babashka, a scripting tool nobody asked for. Introducing conch, future and atom. https://github.com/borkdude/babashka/releases/tag/v0.0.16 follow up in #babashka#2019-09-0418:22OlicalConjure v1.0.0 has been released! https://github.com/Olical/conjure > Clojure (and ClojureScript) tooling for Neovim over a socket prepl connection. Not a lot has changed since v0.25.0 but I'm finally happy with the stability and feature set of the tool. I hope it brings you many happy years of Clojure(Script) Neovim development! There's a lot more still to come with regards to the code it self as well as the documentation surrounding how to start socket prepls with various ClojureScript scenarios.#2019-09-0504:27ahungryjust added this to clojars https://github.com/ahungry/determinism/#2019-09-0508:23viestihttps://github.com/viesti/timbre-json-appender, a JSON appender for Timbre. Makes extracting data from logs easier in for example AWS CloudWatch Logs and GCP Stackdriver Logging.#2019-09-0512:54OlicalI've just released Propel v1.1.0 which now has lein-figwheel support as well as figwheel-main https://github.com/Olical/propel executing clj -m propel.main -e lein-figwheel -w will start figwheel from your project.clj with a random prepl port that gets written to .prepl-port. Magic!#2019-09-0514:34tony.kayMore videos are now available in the Fulcro (version 3) video series on YouTube: https://www.youtube.com/playlist?list=PLVi9lDx-4C_T7jkihlQflyqGqU4xVtsfi#2019-09-0518:57mauricio.szaboJust published Chlorine version 0.1.12. On this version some fixes, but it was mostly an urgent fix for Atom because some APIs were removed from a dependent package without any warning, so Chlorine was simply not working at all#2019-09-0519:03pezSounds absolutely horrible!#2019-09-0613:40mauricio.szaboYes, and it still is. The new API does not support all the things that I need, so there's some functionality that's now missing and it is breaking my own workflow. Still working on it to solve these issues and publish a definitive fix#2019-09-0607:11PawełJust pushed pabloware.diff - readable diff & patch lib. Best used with maps. https://github.com/PawelStroinski/pabloware.diff#2019-09-0613:44vlaaadI made blanket: soft and plushy encapsulation library for Clojure data structures https://github.com/vlaaad/blanket#2019-09-0614:01plexusLambda Island "office hours" live stream starting now https://www.youtube.com/watch?v=loDf8Pk4kD4#2019-09-0708:57borkdudebabashka v0.0.17. most notable new feature: add clojure.core.async! 😊 https://github.com/borkdude/babashka/releases/tag/v0.0.17 follow up in #babashka#2019-09-0719:14viestiHacked a utility for tailing GCP Stackdriver logs: https://github.com/viesti/gcp-utils#tailing-stackdriver-logs#2019-09-0821:23pezWe are readying an improvement to Calva’s Jack in and Connect functionality and would like your feedback before we release. https://clojureverse.org/t/please-help-test-does-your-project-work-with-calva-if-not-why-not/#2019-09-0907:53henrikObviously not mine, but needs to be in here: https://github.com/JetBrains/noria-clj Abstract UI reconciliation library for Clojure, Kotlin, and Rust. Could theoretically be used to implement a VDOM in in CLJS, but is currently only CLJ, not CLJC/CLJS.#2019-09-0910:37martinklepschInteresting. Would be curious how this compares to JaneStreet’s IncrementalDom and generally other prior art#2019-09-0918:19polymerisIt seems to be actually written in Kotlin, so cljs is probably not an option#2019-09-0918:20polymerisoh, wait... kotlin can target js, didn't know that#2019-09-0918:22martinklepschMight still be that the way Kotlin compiles to JS is too high-overhead to be worth it in other languages… similar to how using a library written in CLJS would come with too many “foreign” things to be attractive to JS users#2019-09-1001:02Cam SaulHey everyone. I just put together a library that ports some of the better features of CLOS to Clojure multimethods, and adds a whole lot more. You can call the next method with next-method:
(require '[methodical.core :as m])

(m/defmulti my-multimethod
  :type)

(m/defmethod my-multimethod Object
  [m]
  (assoc m :object? true))

(m/defmethod my-multimethod String
  [m]
  (next-method (assoc m :string? true)))

(my-multimethod {:type String})
;; -> {:type java.lang.String, :string? true, :object? true}
and define auxiliary methods (`:before`, :after, and :around):
(m/defmethod my-multimethod :before String
  [m]
  (assoc m :before? true))

(m/defmethod my-multimethod :around String
  [m]
  (next-method (assoc m :around? true)))

(my-multimethod {:type String})
;; -> {:type java.lang.String, :around? true, :before? true, :string? true, :object? true}
and that’s just the tip of the iceberg. Pluggable caching, support for completely custom dispatch and method combination strategies, functions for programmatically creating and composing multimethods, and a whole lot more! https://github.com/camsaul/methodical
#2019-09-1004:21gerredinspired by a conversation in #shadow-cljs, i've created the #cloud-native channel to discuss/ask questions about this latest buzzword, including all of your other favorite buzzwords such as kubernetes, docker, service meshes (including istio and linkerd!), spiffe/spire, and basically how to optimize Clojure for these environments or talk about Clojure can help us infrastructure engineers / SREs.#2019-09-1004:22gerred(i also sit on several CNCF and LF SIGs related to this, am a core contributor to Kubernetes, Helm, and other projects, and working on a Clojure Kubernetes client for operator development, so happy to spike and grow this channel)#2019-09-1014:09Zac BirWe’re trying to go all-in on CNAB, I’d love to keep abreast of what you’re working on. Joining#2019-09-1006:43ahungryI was griping in #clojure about the lack of a good way to search through the multitude of packages - clojars doesn't seem to list popularity, and searching on github for a specific lib is though#2019-09-1006:43ahungrylet me know what you all think of this: http://slugclojure.ahungry.com/#2019-09-1009:56borkdudeThat seems useful! One question: why only 700-ish results? Feedback: maybe use a slash instead of a dot between the org and the lib name?#2019-09-1011:45StefanI like it as well! Another suggestion: I always look at the projects’s description first on github. To me it would be useful to see this above the project’s README.#2019-09-1011:45StefanThis one for example.#2019-09-1012:04ahungryGood idea on the desc#2019-09-1012:05ahungryThe 700 or so more closely match the clojure toolbox site results vs an open ended query for all#2019-09-1016:49metasoarousGood stuff! This is super useful, and I've wanted something like this in the past; So thanks for putting this out there! Now for some constructive criticism: I do however see that when I search for certain terms, items will come up which are only tangentially related. Maybe there's a way to look for term repeat, or if you're feeling really fancy, do some topic modelling to see if the content is associated with whatever term is being search for (vs mentioning off hand)? I found it even matching partial word matches for unrelated words in some cases (particularly short words), so maybe an exact match option would be helpful?#2019-09-1016:14blueberryNew Release 0.3.0 sheepysheepysheepy https://aiprobook.com/numerical-linear-algebra-for-programmers?release=0.3.0&amp;src=cslack#2019-09-1018:24tony.kayFulcro Beta 15 is on clojars. This release fixes a few more minor issues and adds a bit of dropped SSR logic back. https://github.com/fulcrologic/fulcro/#2019-09-1109:06OlicalPropel can now be used to REPL into any remote or already running prepl, not just start them! https://github.com/Olical/propel
clj -m propel.main --repl-only --port 8787
cljs.core=> (js/alert "Yay!")
#2019-09-1112:12jacekschaeIf you didn’t have a chance already check out the latest episode of ClojureScript Podcast with @stuarthalloway where we talk about Spartan REPL and Sherlock Holmes https://clojurescriptpodcast.com/#2019-09-1112:24OlicalConjure v1.1.0 tagged! neovim + clj https://github.com/Olical/conjure Self prepling into Conjure's own JVM is much faster now, so using nvim scratch.clj in any directory should be almost comparable to executing clj to get a REPL up to try stuff out. The difference being Conjure gives you a full text editor + autocompletion etc. No setup, just install the plugin and open a Clojure file then start evaluating things 😄 Demo: https://asciinema.org/a/267614 I've also improved how paths work internally so working on JVMs within Docker containers or on other machines will still allow you to go to definition.#2019-09-1112:27dominicmHow do you docker jump like that?!#2019-09-1112:30OlicalSo it'll try to find the most specific common relative path that can be found within your CWD of Neovim. As long as your docker container is also sharing your project, even if it's under a different directory, it'll find the source.#2019-09-1112:31OlicalThings inside jar files in your .m2 will open as long as you have the dependency in the outside machine. It won't find the dep source otherwise.#2019-09-1112:31OlicalIt's trying to find the source on your local machine from information found within the remote JVM.#2019-09-1112:31dominicmGenius#2019-09-1112:31dominicmThat would be a great cider nrepl enhancement#2019-09-1112:31OlicalYep! Feel free to "borrow" it! 😄#2019-09-1112:32OlicalI was considering working up from the file name then adding on each parent, but that runs a higher risk of false positives. So I opted for removing path segments from the left, if that makes sense? Until we find a common relative path. I've also done this for when you perform an eval so the "source" file of any vars defined in your eval get a relative path that other tools should be okay with handling.#2019-09-1112:33OlicalThis doens't work in ClojureScript because I can't set the file / line an eval is taking place in. Maaaaaybe if I work out some self hosting magic I'll be able to do that. So you have to eval the entire file sometimes in CLJS to preserve meta-data for go to def.#2019-09-1112:44pezVery cool!#2019-09-1116:03tmacreightThank you so much for this! Incredible work#2019-09-1116:52OlicalYou're most welcome 😊 I hope it works well for you!#2019-09-1116:00avi📣 New release of FC4, a FLOSS framework for authoring, publishing, and maintaining C4 software architecture diagrams: https://github.com/FundingCircle/fc4-framework/releases/tag/release_2019.09.10-c987903#2019-09-1116:00aviIf you’re wondering how this is relevant: the fc4 tool is implemented with Clojure and this release is a step towards replacing a Node+JS element of the tool with “pure” Clojure code.#2019-09-1121:51borkdudebabashka, a native clojure scripting tool just got a new release, most notably the addition of clojure.tools.cli to parse command line arguments. https://github.com/borkdude/babashka/releases/tag/v0.0.18#2019-09-1220:29hlshipcom.walmartlabs/lacinia 0.35.0 Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Featured changes in 0.35.0: - Resolves Antlr-related issue that prevented AWS lamba deployments - Add missing check for non-null field argument bound to missing variable#2019-09-1223:38gerredHey Atom users (though I use a lot of different editors depending on how I feel that day), I published a clj-kondo plugin for atom! https://atom.io/packages/linter-kondo 🎉#2019-09-1309:44plexushttps://clojureverse.org/t/clojurians-log-is-looking-for-help/4831#2019-09-1312:21plexusAlso a reminder to make sure @U055W814A is invited to any channel you want to see show up at https://clojurians-log.clojureverse.org#2019-09-1418:25mauricio.szaboJust published a new version of Chlorine (0.1.14), Socket REPL plug-in for the Atom editor. On this edition, a new console to render stdout, stderr, and evaluation results. There's not much on this release, but it fixes a huge problem with some workflows (mine included 😆)#2019-09-1611:56madstapI wrote a little DSL for scheduling. For an example, triple witching hour is [#{:march :june :september :december} [3 :friday] "15:00" "America/New_York"]. It's not on clojars yet, because I didn't figure out how to deploy with deps.edn yet, but the git coords are in the readme. https://github.com/madstap/recex/#2019-09-1612:15Christian JohansenThere is some info on deploying with deps.edn here: https://cjohansen.no/tools-deps-figwheel-main-devcards-emacs/ It's written for ClojureScript, but deployment (step 8) is the same for both.#2019-09-1711:18Adam HelinsA new library for doing all sorts of discrete event simulation ! Particularly useful for animations and games, even if you know nothing about simulation. For instance, it is a very good companion for Quil. A simple yet powerful tool. https://github.com/dvlopt/dsim.clj#2019-09-1723:33blueberryhttps://dragan.rocks/articles/19/Common-Gotcha-Asynchronous-GPU-CUDA-Computing-Clojure#2019-09-1806:18jacekschaeThis week on ClojureScript Podcast discussion with @seancorfield about REBL - https://soundcloud.com/user-959992602/s2-e3-rebl-with-sean-corfield#2019-09-1806:40dharriganThe last one with Stuart was great listening about his "Spartan" REPL setup etc...#2019-09-1808:19vlaaadYes it was, although I feel he goes too far. Stuff like find usages, go to definition and auto-completion is immensely useful and a great time saver.#2019-09-1808:37dominicmHe has find uses in rebl, fwiw#2019-09-1808:38dominicmI'd bet he uses some kind of grep too. I wonder if his dotfiles are online?#2019-09-1808:51danielnealevery morning I get up and do 100 sit ups a hunderd press ups a hundred squat a ten k run and find usages for 100 vars#2019-09-1809:11vlaaadclojure is not greppable. try find usages of namespaced keyword :a/b when it can be ::some-ns/b, #:a{:b 1}, {:a/keys [b]}, {:keys [a/b]}, {::some-ns/keys [b]}
#2019-09-1809:13vlaaadfind usages in rebl can find only runtime usages of functions to vars. can't find usages of values. can't find usages of java.#2019-09-1815:30seancorfield@U47G49KHQ He talks about why he doesn't want auto-completion on that podcast tho' -- as a "self-check" to keep his APIs small and memorizable and I get that point.#2019-09-1815:32seancorfieldAnd Clojure code is "more" greppable if you are very consistent about how you use namespaces and aliases (but, yes, destructuring makes that a bit less straightforward).#2019-09-1815:34seancorfieldWe have 90K lines of Clojure at work and don't find that particularly challenging (and our in-house "style" has certainly changed over the years, so our code isn't as consistent as it could/should be).#2019-09-1815:36vlaaadI don't have problems with keeping consistency in my own projects, but using dependencies means there will be multitude of different styles#2019-09-1815:38vlaaadand APIs of different size#2019-09-1815:39vlaaadand using java interop is idiomatic#2019-09-1815:40vlaaadI think it's a nice self-imposed constraint for a library author, but during day-to-day development I want a bit more help... which I get with cursive 🙂#2019-09-1815:43seancorfieldI use compliment for day-to-day development -- I'm not quite as austere as Stu, but I like a nice, simple toolset (e.g., a Socket REPL rather than nREPL etc).#2019-09-1815:46dominicmIt's a good reason to use simple dependencies too#2019-09-1815:55vlaaad@seancorfield do you have editor integration for compliment or do you invoke it directly?#2019-09-1815:56seancorfieldIntegrated via Chlorine (for Atom).#2019-09-1816:52dharriganThe recent podcast re: REBL is great too 🙂#2019-09-1818:08seancorfieldThanks @U11EL3P9U#2019-09-1818:12dharriganI'm encouraged to try it out again 🙂#2019-09-1818:12seancorfieldHappy to help / answer any Qs!#2019-09-1821:38timgilbertFWIW, Cursive is smart enough to find usages on all the keyword syntax variants that vlaad listed above. (I agree that plain grep / regex searching is not very useful for this purpose)#2019-09-1819:28Daw-Ran LiouEmoji for Clojure 0.1.2 released. https://github.com/dawran6/emoji#2019-09-1820:33lumpygreat job, would be more idiomatic if all keys used kebab case instead of snake case, i created a PR https://github.com/dawran6/emoji/pull/2#2019-09-1914:21wilkerlucio[com.wsscode/pathom "2.2.25"] is out! This version adds a few sugar helpers to create connect parsers with ease, also adds some new helpers to create resolvers for constant values and single attribute transitions. Also includes stability updates for the parallel parser. You can find docs on the sugar things at: https://wilkerlucio.github.io/pathom/v2/pathom/2.2.0/sugar.html Also there are new docs on the resolver helpers: https://wilkerlucio.github.io/pathom/v2/pathom/2.2.0/connect/resolvers.html#_resolver_builders Full changelog: https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2019-09-2003:51tony.kayFulcro 3 has passed through Beta, docs are pretty decent (mostly updated), 15-odd videos recorded, and we’ve ported a 27kloc Fulcro app. Time for RC1! Fulcro 3.0.0-RC1 is on Clojars. https://github.com/fulcrologic/fulcro#2019-09-2008:05blueberryNew release 0.9.0 sheepy https://aiprobook.com/deep-learning-for-programmers?release=0.9.0&amp;src=cslack#2019-09-2015:00kkuehnedatahike 0.2.0 released: https://lambdaforge.io/2019/09/20/datahike-release-0.2.0.html#2019-09-2018:38Daw-Ran Lioudawran6/emoji 0.1.3 released: https://github.com/dawran6/emoji
clojure
(require '[emoji.core :as e])

(e/emojify "Clojure is awesome :thumbsup:")
;; => "Clojure is awesome 👍"

(e/emojify-all "Clojure pizza fire thumbsup smile")
;; => "Clojure 🍕 🔥 👍 😄"
#2019-09-2023:20LuAdded to the form library more pre-built components: - fancy dropdowns (BULMA framework) - normal dropdowns https://github.com/luciodale/fork#2019-09-2112:44blueberryhttps://twitter.com/uncomplicateorg/status/1175384960821334016#2019-09-2221:40borkdudeclj-kondo v2019.09.22-alpha Type checking and more. https://github.com/borkdude/clj-kondo/releases/tag/v2019.09.22-alpha Follow up in #clj-kondo.#2019-09-2301:00curtis.summersHugSQL 0.5.0 (and followup bugfix 0.5.1) Significant updates include: - namespaced keywords support (Thank you Sebastian Poeplau!) - next.jdbc adapter (Thank you Nikola Peric for the implementation and Sean Corfield for next.jdbc) Full CHANGELOG: https://github.com/layerware/hugsql/blob/0de26acce2fc4d07f0efb51c0d08ba4ab756a708/CHANGELOG.md Clojars: https://clojars.org/com.layerware/hugsql Docs: https://www.hugsql.org#2019-09-2307:29borkdudeedamame, EDN parser with location metadata and pluggable dispatch table, v0.0.4 https://github.com/borkdude/edamame/releases/tag/v0.0.4#2019-09-2416:57blueberryhttps://twitter.com/draganrocks/status/1176540540868988933#2019-09-2419:47mauricio.szaboJust published Chlorine v0.2.0, socket REPL integration for Atom. Lots of things in this new version: autocomplete both with and without Compliment for Clojure and ClojureScript (Shadow-CLJS only for now), some stability fixes, and the ability to decide which shadow-cljs target to use. Discussions on #chlorine channel 🙂#2019-09-2506:43jacekschaeThis week on https://clojurescriptpodcast.com discussion with @jr0cket and how to setup spacemacs for ClojureScript and Clojure development#2019-09-2521:43madstapReleased https://github.com/madstap/recex/ version 0.1.0 on clojars. recex is a small DSL for generating recurring times. New in this version: cron->recex#2019-09-2617:54tony.kayThe official release of Fulcro 3 is now on clojars. https://github.com/fulcrologic/fulcro/#2019-09-2623:24mauricio.szaboJust published Chlorine v0.2.2, socket REPL integration for Atom, fixing some issues (exceptions now show the real problem of a crash, and also a nasty bug with autocomplete that was force-closing the editor). Discussions on #chlorine channel 🙂#2019-09-2803:15seancorfieldseancorfield/next.jdbc {:mvn/version "1.0.8"} -- Adds :jdbcUrl + options variant db-spec; next.jdbc.specs/unstrument (thanks @gerred); documents HugSQL next.jdbc adapter + other doc improvements -- https://github.com/seancorfield/next-jdbc/releases/tag/v1.0.8 -- follow-up in #sql and/or #hugsql as appropriate#2019-09-2803:18tony.kayI’ve released some more videos in the Fulcro tutorial series. New ones include some dynamic UI built with data and some coverage of UI State Machines. https://www.youtube.com/playlist?list=PLVi9lDx-4C_T7jkihlQflyqGqU4xVtsfi#2019-09-3001:32athomasoriginalFinally got around to solving a 2 year old bug in a project from the early days of my Clojure learning journey https://betweentwoparens.com/students-of-the-game-reloadable-code#2019-09-3014:57leonoelFirst release of clope, a byte rope implementation for clojure and clojurescript. https://github.com/leonoel/clope#2019-09-3015:25paul ai have some cljs code where i store about 2 MB in a Uint8Array. i update some values in the byte array (no shortening or lengthening it) and then return it. is clope up my alley?#2019-09-3016:17leonoel@UN0TDQ30T maybe, depending on your use case and performance requirements. the right way to update a portion of an immutable rope is to extract a subrope of the portion you want to update, copy it to a new buffer, mutate the buffer, wrap it in a new rope and finally join it with the unmodified subropes before and after. All these operations should be reasonably fast.#2019-09-3016:17paul ai see, thanks!#2019-09-3016:18leonoelmutate the underlying array in-place is at best hackish as it will break internal hashcode caching#2019-09-3020:21andy.fingerhutVersion 0.1.0 of the core.rrb-vector library has been released, with fixes for several bugs found in earlier releases. https://github.com/clojure/core.rrb-vector . Change log: https://github.com/clojure/core.rrb-vector/blob/master/CHANGES.md#2019-10-0101:45plexusKaocha 0.0-549 is out, with support for Aero's #profile reader tags. https://cljdoc.org/d/lambdaisland/kaocha/0.0-549/doc/3-configuration#profiles#2019-10-0109:47plexusMake that 0.0-554, I had to fix a regression.#2019-10-0109:47plexuscomments/questions/discussions can go to #kaocha#2019-10-0116:29niwinzpromesa-4.0.0 has been released. Release focused on performance and consistency/usability improvements: Changelog: https://github.com/funcool/promesa/blob/master/CHANGELOG.md#version-400#2019-10-0206:11jacekschaeAre you into VSCode? Check out this week episode and how you can set it up for Clojure and ClojureScript development with @pez Peter Strömberg https://soundcloud.com/user-959992602/s2-e5-vscode-setup-with-peter-stromberg#2019-10-0222:21wcohenfactual/geo 3.0.0 - Primary new features are 1) use of the now-incubated locationtech release of proj4j and 2) the allowed use of externally created CoordinateTransforms to reproject multiple features more performantly. https://github.com/Factual/geo/blob/master/CHANGELOG.md Also, based on geo, two new geospatial libraries in development, with initial alpha releases planned soon: https://github.com/willcohen/ovid - a Featurelike protocol that includes additional attribute properties alongside a geometry based on geo's Shapelike, allows interoperability between feature maps and pure Shapelike, and enables reading/writing GIS file types (preliminary support for reading .shp geometries is present, with .dbf and .prj in development) https://github.com/willcohen/aurelius - uses ovid's Featurelike to enable transducible/composable functions operating on both geometries and features#2019-10-0309:19borkdudeEdamame (EDN parser with location metadata and configurable dispatch table) v0.0.5 https://github.com/borkdude/edamame/releases/tag/v0.0.5#2019-10-0309:30borkdudeBabashka, a Clojure scription solution with fast startup, v0.0.19: https://github.com/borkdude/babashka/releases/tag/v0.0.19#2019-10-0611:35borkdudebb v0.0.20 is now also released which fixes a bug when parsing the empty map.#2019-10-0320:24vlaaadThere is a minor new release of #cljfx, a functional and extensible wrapper of JavaFX inspired by better parts of react and re-frame: https://github.com/cljfx/cljfx/blob/master/CHANGELOG.md I haven't really announced any cljfx releases in a while, but in addition to a bunch of minor fixes and improvements since previous announcement, there is a notable new feature, which is a basic declarative animation support (example: https://github.com/cljfx/cljfx/blob/master/examples/e31_indefinite_transitions.clj)#2019-10-0408:23borkdudeclj-kondo v2019.10.04-alpha: more types, unused private var linter and several bugfixes. https://github.com/borkdude/clj-kondo/releases/tag/v2019.10.04-alpha follow up in #clj-kondo#2019-10-0408:54Dainius JocasBeagle, a streaming search library based on Lucene Monitor, v0.3.1 https://github.com/tokenmill/beagle#2019-10-0514:07borkdudesci (Small Clojure Interpreter) is now available on NPM: https://www.npmjs.com/package/@borkdude/sci#2019-10-0516:31borkdudeYou can try it out in the browser: https://runkit.com/embed/ad8d8oeg6dr3#2019-10-0614:21carocadhey everyone, here is a little contribution from me. A way to parse Clojure(script) code safely. I hope you like it 🙂 https://github.com/carocad/parcera#2019-10-0614:29borkdudenice!#2019-10-0614:52dominicmWhat are you using it for?#2019-10-0614:57carocad@U09LZR36F so far I am not using it. But I was hoping it would be useful to people out there wanting to parse clojure but not doing it since read-string is not safe and edn/read cannot parse clojure code. I have seen a couple of projects die out due to that so I thought I would help a little 😅#2019-10-0614:58dominicmI may try and reimplement something of mine based on this. Is it a goal to have perfectly bidirectional snippets?#2019-10-0614:58borkduderewrite-clj has a similar goal#2019-10-0614:59borkdudehttps://github.com/borkdude/edamame is used to parse code in sci/babashka (it skips intermediate representation and parses directly to code, bidirectionality is not a goal).#2019-10-0614:59dominicmYeah, current implementation is rewrite but I found it difficult to work with for reasons you mentioned :)#2019-10-0614:59dominicm(Eg metadata)#2019-10-0614:59borkdude
user=> (parcera/clojure "(defn foo [])")
[:code [:whitespace ""] [:list [:whitespace ""] [:symbol "defn"] [:whitespace " "] [:whitespace ""] [:symbol "foo"] [:whitespace " "] [:whitespace ""] [:vector] [:whitespace ""]] [:whitespace ""]]
I see a couple of empty whitespace nodes there.
#2019-10-0615:01borkdudekudos for cljc support!#2019-10-0615:05borkdudeit seems instaparse supports .cljc. maybe parcera could also support a CLJS API#2019-10-0615:06borkdudeoverall impressive work, thanks for sharing @U0LJU20SJ#2019-10-0615:30pezSuper nice stuff!#2019-10-0615:41carocad> Is it a goal to have perfectly bidirectional snippets? @U09LZR36F yes, that is a goal. You can check the test cases and see that currently it is possible to parse and stringify both clojure.core and cljs.core#2019-10-0615:43dominicmThat's awesome#2019-10-0615:43dominicmMight break the keyboard out now#2019-10-0615:45carocad> I see a couple of empty whitespace nodes there @U04V15CAJ yeah, unfortunately I have not been able to get rid of those. The problem is that instaparse becomes too slow if I always checks for optional whitespace. So instead I made it mandatory and allowed it to be empty. Maybe in the future I can get rid of this but so far it doesnt seem to hurt and it probably would be easier to just provide a walk function which removes unwanted nodes 😉#2019-10-0615:46borkdudehow is performance overall?#2019-10-0615:47dominicmI measured instaparse a while ago against j.u.regex, and it was several orders of magnitude slower.#2019-10-0615:47dominicmI wasn't using instaparse's regex support though, so it might be faster when not using it#2019-10-0615:47dominicm(Sorry, not a useful answer)#2019-10-0615:47carocad> it seems instaparse supports .cljc. maybe parcera could also support a CLJS API @U04V15CAJ I would need a bit of support there since I dont know of any “string building” api in Js. That is so far my the only show stopper since str was quite slow for big input#2019-10-0615:48borkdude@U0LJU20SJ I think the API for goog StringBuffer is more or less the same as StringBuilder#2019-10-0615:49borkdudehttps://google.github.io/closure-library/api/goog.string.StringBuffer.html#2019-10-0615:53carocad> how is performance overall? @U04V15CAJ as @U09LZR36F mentioned, performance is not the best compared to other tools out there. A roundtrip of clojure.core takes around 6 seconds (in my machine) … around 8k lines#2019-10-0615:53dominicmThat's fairly reasonable I'd say#2019-10-0615:54borkdudeis that only the source dir? clj-kondo can lint clojure src in 2 seconds. so I'm holding off on swapping to Instaparse-based for now 🙂#2019-10-0615:55dominicmI think a specialized instaparse-like thing could be created.#2019-10-0615:55borkdudewait, this includes writing of course. what about only the parsing @U0LJU20SJ?#2019-10-0615:56dominicmWe could fire this up in a repl and find out... :p#2019-10-0615:57borkdudeI'm cooking dinner right now, will you be my REPL?#2019-10-0615:58carocad@U09LZR36F you are right on the spot. Performance varies depending on the machine so I can not promise anything 😅 . However, I just check and parsing takes most of the time …. 5.5 seconds#2019-10-0615:58borkdudeon a cheap macbook air: linting took 1903ms, errors: 34, warnings: 387#2019-10-0615:59borkdudeit's not that bad though 5.5 seconds and can be very useful for tools that don't need to be super fast for editor support#2019-10-0616:00borkdudeI bet this grammar of yours can also be used to generate a Java parser that could be faster#2019-10-0616:00borkdudeusing ANTLR maybe#2019-10-0616:04carocadyeah, probably. Although I would also like to know how user friendly they are. Instaparse can point out things like ambiguities, failure position, metadata on each node. I think those are incredible tools and would prefer to make Instaparse faster than to rewrite the complete thing in a less user friendly tool#2019-10-0616:09dominicminstaparse is considered quite fast for what it is I think 🙂#2019-10-0616:09borkdude@U09LZR36F fwiw, parcera has the same metadata issue I had with rewrite-clj:
user=> (parcera/clojure "^:private []")
[:code [:whitespace ""] [:metadata [:simple-keyword "private"] [:whitespace " "] [:vector] [:whitespace ""]] [:whitespace ""]]
#2019-10-0616:10dominicmOh man, that's a shame.#2019-10-0616:10borkdudeit makes sense from a parsing->writing point of view but from a code analyzing point of view it's a bit unhandy#2019-10-0616:10dominicmI wonder if this form is easier to work with for re-shaping though#2019-10-0616:11borkdudewell, I just changed clj-kondo's "vendored" rewrite-clj. also I stripped out all the whitespace because it's just noise to clj-kondo#2019-10-0616:11dominicmI quite want all the whitespace 😛 I want a whitespace-preserving config/edn rewriter.#2019-10-0616:11borkdudedo you use metadata in config a lot?#2019-10-0616:12dominicmNot really, no. But I don't want to break what others are doing.#2019-10-0616:13carocad> fwiw, parcera has the same metadata issue I had with rewrite-clj: @U04V15CAJ what issue is that :thinking_face: ?#2019-10-0616:15dominicmit's about convenience for parsing, consider this example:
(parcera/clojure "{^:x :a,1}")
;; =>
[:code
 [:whitespace ""]
 [:map
  [:map-content
   [:whitespace ""]
   [:metadata [:simple-keyword "x"] [:whitespace " "] [:simple-keyword "a"] [:whitespace ","]]
   [:whitespace ""]
   [:whitespace ""]
   [:number "1"]
   [:whitespace ""]]]
 [:whitespace ""]]
You have to unwrap every node to determine whether it's metadata or not in order to get to the real value.
#2019-10-0616:15dominicmThe common desire is to access the real value#2019-10-0616:15borkdude@U0LJU20SJ for example you're analyzing this function: (defn ^String foo [^String x ^Long x] ...). When walking over the nodes, I generally don't want to check if a node is metadata containing some other value and then pull the value I'm actually interested out. I just want to work with those values and if I'm interested in metadata, look at that optionally.#2019-10-0616:18borkdude@U0LJU20SJ don't get me wrong, what you made is super cool. it's just something I noticed when working with rewrite-clj.#2019-10-0616:20carocadyeah, you are right. However we have conflicting goals. My goal was to guarantee bidirectional snippets and to optionally allow for people to only “see” a part of the complete parsing process. If I dont include those nodes there then I could not make a full roundtrip without losing information. My idea was that such things can be easily done with things like zippers and walk which can automatically remove them without having to actually check for it manually on an implementation#2019-10-0616:20borkdudebtw, rewrite-clj has a companion zipper namespace for rewriting. could also be nice for this lib, although you could maybe do it with normal clojure zippers#2019-10-0616:21carocad> don’t get me wrong, what you made is super cool. no worries, all feedback is welcome. I was also thinking of putting some “node removal” functions in parcera but I am not sure if this should be in the core :thinking_face:#2019-10-0616:21borkdude@U0LJU20SJ true, conflicting goals indeed#2019-10-0616:21borkdudethe way I solved it in my fork of rewrite-clj is to lift metadata nodes as real metadata on the value nodes. you could check for that on the way back when writing out.#2019-10-0616:49borkdudeBtw, the benchmark of 5.5 was this just "core.clj" or entire Clojure src? I assumed entire Clojure src#2019-10-0617:02carocadnope, it was just core.clj#2019-10-0617:14borkdudeAh I see. I think if you would rewrite this using tools.reader it could be orders of magnitude faster, if that’s a goal#2019-10-0617:14borkdudeBut then you’re basically doing the same as rewrite-clj#2019-10-0617:23carocad> But then you’re basically doing the same as rewrite-clj yeap, exactly. That is not a goal. rewrite-clj already does that so no need to do the same. That is what I meant before with “I prefer to make instaparse faster than to completely rewrite this just to make it faster”#2019-10-0617:23carocadparcera is still in its infancy … with time we will see which path it takes 😉#2019-10-0617:24borkdude👍#2019-10-0617:44Alex Miller (Clojure team)Btw there was an antlr grammar in Clojure long long ago, before the LispReader existed#2019-10-0618:41carocadoh really ? what happened with it ? I find it quite nice to have a grammar to look at as “source of truth” for a language. From what I saw in the clojure compiler it seems like a “one pass does all” kind of approach …. I guess due to performance ?#2019-10-0621:06dominicm
(parcera/code
  (m/rewrite (parcera/clojure "(-> a b c)")
             [?tag . !rest-pre ... . [:list . (m/pred whitespace?) ... . [:symbol "->"] . (m/or (m/pred whitespace?) [:symbol _ :as !args]) ...] . !rest-post ...]
             (m/with [%list [:list !args [:whitespace " "] . %list ...]]
               [?tag . !rest-pre ... . %list ... . !rest-post ...])

             [?tag . (m/cata !content) ...]
             [?tag . !content ...]

             ?x
             ?x))
I wrote (with a lot of help from #meander) a little tool for rewriting (-> a b c) to (a (b (c))) 🙂 Very handy
#2019-10-0623:46Alex Miller (Clojure team)@U0LJU20SJ was replaced with the LispReader#2019-10-0623:57Alex Miller (Clojure team)InsideClojure journal 2019.23 http://insideclojure.org/2019/10/06/journal/#2019-10-0702:30Candidjoker v0.12.8 is out: https://github.com/candid82/joker/releases/tag/v0.12.8#2019-10-0712:38blueberryNew release 0.10.0 + Momentum and Nesterov Momentum sheepy http://aiprobook.com/deep-learning-for-programmers?release=0.10.0&amp;src=sclojure#2019-10-0805:28Candidjoker v0.12.9 is out: https://github.com/candid82/joker/releases/tag/v0.12.9 (fixes (read-line) regression in v0.12.8)#2019-10-0816:22bozhidarCIDER 0.23 is out! https://metaredux.com/posts/2019/10/08/cider-0-23-lima.html#2019-10-0819:11greglooklein-monolith 1.3.0 is available, improving compatibility out of the box with JDK 9+ https://github.com/amperity/lein-monolith/blob/master/CHANGELOG.md#130---2019-10-07#2019-10-0906:02jacekschaeThis week on https://clojurescriptpodcast.com Atom setup with @mauricio.szabo#2019-10-0922:21carocadthanks to @pez parcera now supports Clojurescript execution 🙂. v0.2.0 released https://github.com/carocad/parcera#2019-10-0923:09mauricio.szaboOh, he was faster than me 😄#2019-10-0922:54Daniel SlutskyRegistration and more details towards the datahike meeting next week: https://twitter.com/scicloj/status/1182065848955092992#2019-10-0923:20mauricio.szaboJust a quick post about my first experience with native apps with proton-native in ClojureScript, using the wonderful NPM integration on shadow-cljs: https://mauricio.szabo.link/blog/2019/10/09/quick-post-native-apps-with-clojurescript/#2019-10-1008:31borkdudeReleased babashka, a native scripting tool for Clojure, v0.0.21: https://github.com/borkdude/babashka/releases/tag/v0.0.21#2019-10-1009:53mkvlryou're really on 🔥 right now, thanks a lot for all your work. Just looked at https://www.clojuriststogether.org/projects/ to see if you're funded currently but it looks like you're not…#2019-10-1009:53borkdudeI would apply if I didn't have a job right now 😉#2019-10-1103:00tony.kayI’ve just released a Fulcro Native template project, and short YouTube video covering how it works. It demonstrates how easy it is to get a full-stack webapp and native mobile app running in the same project (with live hot code reload for both web/native), logic sharing, all talking to the same server back-end. https://github.com/fulcrologic/fulcro-native-template https://www.youtube.com/watch?v=03I9uRxVQsc#2019-10-1112:31vemvlet and letfn have joined the https://github.com/nedap/speced.def family. Sample usage:
(speced/let [^String a x                                           ;; assert that `a` is a `String`, keep the type hint
             {:keys [^long? b]} y                                  ;; assert that `b` satisfies `long?`, infer a `Long` type hint
             [[[[^{::speced/spec (spec/coll-of boolean?)} c]]]] z] ;; assertions support deep destructuring and custom inline specs
  ,,,)
Enjoy!
#2019-10-2511:39Jakub Holý (HolyJak)Hello @U45T93RA6! Do I understand correctly that speced does not generate s/fdef and thus does help if you want to do generative testing https://clojure.org/guides/spec#_testing ? Thank you!#2019-10-2511:45vemvHi! Indeed it does not emit fdefs. It only emits :pre/:post conditions, or assert statements (which are essentially the same mechanism). So it doesn't particularly help generative testing. But it does encourage creating more (and better) specs, which can well be reused in the context of generative tests. At Nedap we certainly put in practice both this library, and the occasional generative testing. tldr, it's orthogonal.#2019-10-1114:14borkdudeclj-kondo v2019.10.11-alpha: mostly minor bugfixes and enhancements https://github.com/borkdude/clj-kondo/releases/tag/v2019.10.11-alpha#2019-10-1115:15jerger_at_ddaProudly present a new BugFix release for data-test. https://github.com/DomainDrivenArchitecture/data-test#2019-10-1216:12CameronAnnouncing tsv2csv https://github.com/cjbarre/tsv2csv#2019-10-1319:54OlicalI released Conjure v2.0.0 today, slight breaking changes around config, hence the 2. You can now easily hook Conjure into REBL so your evaluations and their results appear in the UI for your browsing pleasure! This integration isn't specific to REBL though, if you have any tool or library you'd like to hook into all of your evaluations, now you can! Hooks provide a way to configure tools.namespace/refresh as well as alter code before it's evaluated and see the resulting data. Go wild! (see the README for examples https://github.com/Olical/conjure#hooks) I've also improved how you filter a prepl connections down to specific files, directories and extensions. It should make it easier to work in multiple Clojure(Script) prepls at once in one project without evaluating the wrong thing in the wrong environment. https://github.com/Olical/conjure/releases/tag/v2.0.0#2019-10-1320:33seancorfieldorg.clojure/java.data "0.1.4" -- the first new release in seven years of this contrib library to convert Java beans to Clojure data and vice versa! https://github.com/clojure/java.data Fixes most of the open issues that were still valid (invalid issues have all been closed). Follow up via DM or in #clojure (thanks to @jonpither for spurring me to work on this!)#2019-10-1419:23carocadparcera the grammar-based Clojure(script) parser is now 3 times faster than before 🚀. Unfortunately this lead to some breaking changes so make sure to check the release notes 😅 - https://github.com/carocad/parcera - https://github.com/carocad/parcera/releases/tag/v0.3.0#2019-10-1512:22borkdudeCurious to hear what made it faster 🙂#2019-10-1514:14carocadfollowing and understanding the Performance notes from Instaparse. two main points: - defining all tokens completely instead of on parts - avoid checking all paths of the grammar by using ordered OR instead of unordered or.#2019-10-1514:16carocad@U04V15CAJ btw, no more empty whitespaces 😏#2019-10-1514:16borkdudenice 🙂#2019-10-1514:19carocadstill not blazing fast as your parser but much better than before. I am still checking how can I make it faster though :thinking_face:#2019-10-1514:21borkduderewrite-clj isn't my parser btw#2019-10-1514:21borkdudeI'm only using it#2019-10-1420:50Daniel SlutskyUpcoming web meeting meeting: @ikitommi about Malli -- plain data schemas in Clojure/Script https://twitter.com/scicloj/status/1183845705380696064#2019-10-1509:24blueberryNew release 0.4.0 + Orthogonalization and Least Squares sheepysheepysheepysheepy https://aiprobook.com/numerical-linear-algebra-for-programmers?release=0.4.0&amp;source=cslack#2019-10-1511:41lnostdalhmm, only Patreon? x)#2019-10-1512:00blueberry@UH2S6LS86 Unfortunately, this is the only option that works where I live.#2019-10-1513:30eval2020Periodic reminder that a searchable archive of this Slack-team can be found at Clojurians-Zulip: https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive It goes back to Feb of this year (and gains approx. 4700 msg/week). If a Slack-channel is not showing up there, make sure to add @zulip-mirror-bot to said Slack-channel (ie /invite @zulip-mirror-bot). Followup in #community-development (here or on Zulip). Enjoy!#2019-10-1520:52csmI’ve been working on this https://github.com/csm/s4 recently, which simulates the S3 and SQS APIs. This release (0.1.7) is probably “good enough” for me to announce it.#2019-10-1520:55csmThe reason I wrote this was to do some exploration on some cool storage systems that came out recently, and seeing if using S3 as the storage backend would be a viable option, since S3 storage is so inexpensive. Datahike on S3/DDB: https://github.com/csm/datahike-s3; Crux on S3/SQS: https://github.com/csm/crux-aws#2019-10-1520:57csmThere is quite a lot of the S3 API still left to implement, but the basics are all there, and seem to work well with the Cognitect AWS client.#2019-10-1607:59orestisLove it!#2019-10-1614:58sbMini Vega Chart library (alpha version) for Shadow-cljs projects. https://github.com/damesek/vega-charts-shadow-cljs - that is forked from OZ, as a mini version, because at my larger projects.. I had a dependency hell (conflicts which I can’t manage..).#2019-10-1615:57gklijsI did something similar yesterday. Moving from creating static html, to react component instead.#2019-10-1617:44sbYes, I started a same way. I was happy with OZ, just not compatible with our architecture. I think, shadow-cljs is a cool thing, easy setup npm libs. Create nice projects#2019-10-1621:56dcjOz-lite? 🙂#2019-10-1622:04gklijsIn my case or would be re-oz or something.. Building it into the router so a certain diagram can be easily shared. Very specific, not generic enough to make it a separate lib I think. Although line plots comparing different 'flavours' along a time related y-axis might be one of the most common graphs..#2019-10-1615:21jacekschaeThis week on https://clojurescriptpodcast.com/ we talk with @cfleming about setting up Cursive for #clojure and #clojurescript development.#2019-10-1619:45borkdudereleased the Small Clojure Interpreter v0.0.10: https://github.com/borkdude/sci/releases/tag/v0.0.10#2019-10-1714:44Ivan Fedorovnew crux release [juxt/crux-core "19.09-1.5.0-alpha"] Theme: configurable database topology. More tools to shape basic configurations the way you want.
PR #340: Breaking Remove api helpers for creating specific node types
Refactoring: Modularize configuration options defaults and documentation
Refactoring: Test fixtures more composable
#352: fix Kotlin multi-threaded node-start issues
#348; Increase range constraints var-frequency for join order
https://github.com/juxt/crux P.S. Love and support are always nearby on #crux
#2019-10-1721:35vlaaad#cljfx 1.5.0 is released, introducing new feature: ext-set-env/`ext-get-env`, allowing environment manipulation, which is similar to react's contexts. Cljfx is a declarative, functional and extensible wrapper of JavaFX inspired by better parts of react and re-frame. https://github.com/cljfx/cljfx/blob/master/CHANGELOG.md#150---2019-10-17#2019-10-1910:54sakalliHi * the folks at Scicloj are looking into organizing a Clojure data science meetup in connection to ClojureD end of Feb in Berlin. Are you joining us / interested? Let us know -> https://docs.google.com/forms/d/e/1FAIpQLSegn2lQ2TEoh_Lg48YcDy-U_aIjtFkQFb7ifIuz6C8izep2Fg/viewform#2019-10-1919:21Daniel SlutskyVideo of the Scicloj meeting about Datahike we had on Monday: https://youtu.be/Hjo4TEV81sQ Many thanks to @konrad.kuehne for the talk, @sakalli for moderating and @danielsz for some historical background he gave through the talk. ❤️#2019-10-2012:50jarohen(finally!) released Nomad 0.9.0 - preferring to keep Clojure configuration and secrets near the code they're configuring - more rationale and code at https://github.com/jarohen/nomad#2019-10-2019:12borkdudeSmall Clojure Interpreter playground! https://borkdude.github.io/sci.web/#2019-10-2106:49ikitommiMalli Schema Playground! (inspired by web-tools by @borkdude) - https://malli.io#2019-10-2107:30steveb8nfirst time I’ve seen a playground. so much better than a readme. has anyone figured out how to embed it in a readme?#2019-10-2109:10borkdudemaybe take a look at how @U0L91U7A8 does it with klipse?#2019-10-2111:15Filipe SilvaHeya all, I've just published https://github.com/filipesilva/create-cljs-app. It is focused on making it easy for JS and React developers to get started with ClojureScript. You can use it via npx create-cljs-app my-app or yarn create cljs-app my-app. That will create an app on my-app that has preconfigured scripts for building, testing, e2e, linting, and formatting. Everything works on Linux, OSX, and Windows. I'm not super well aligned with idiomatic CLJS usage so if you think there's something that should be done in another way please let me know. A couple of big thank yous: @roman01la for providing the create-cljs-app npm package and making zlint-clj support whole dirs, @borkdude for helping me distribute clj-kondo on npm, and @thheller for making the awesome shadow-cljs that the starter uses#2019-10-2111:17Filipe SilvaTogether with the above, clj-kondo is now on npm too via https://github.com/filipesilva/clj-kondo. You can install it globally or locally and run it as usual. It will use native binaries where available and fallback to the jar file otherwise.#2019-10-2115:53Alex Miller (Clojure team)tools.deps.alpha 0.8.578, clj 1.10.1.478 are now available#2019-10-2115:54Alex Miller (Clojure team)These releases are now available in the usual places. Changes: * Add support for :deps and :paths in aliases to replace the equivalent project :deps and :paths - see below * TDEPS-29 - fix -Sgen unnecessary newlines in generated pom in Java 9+ (big thanks to the tip in ask.clojure by Andrey Antukh!) * TDEPS-138 - add tools.deps.alpha.reader/user-deps-location function The big change here is to support replacement :deps and :paths in aliases, designed for tools that don't require the project classpath. In these cases, you can use :deps (and :paths if needed, although that's probably uncommon) instead of :extra-deps (or :extra-paths) to set the tool's classpath (and ignore the project :deps entirely). This can reduce the risk of conflicts between the tool classpath and the project classpath. For example, you could configure depot in a deps.edn as follows:
{:aliases
 {:depot
  {:deps {olical/depot {:mvn/version "1.8.4"}}
   :main-opts ["-m" "depot.outdated.main"]}}}
And run it with clj -A:depot. Here, the :deps replaces the project deps so there is less risk of conflict between depot's deps and your own project deps. Additionally, I would encourage you to install tools like this not in your project deps.edn, but once in your ~/.clojure/deps.edn instead. Note that is not applicable to every tool - some tools (test runners in particular) rely on running in the context of your project classpath and thus I would not recommend any changes to how they are configured (they should still use :extra-deps, etc).
#2019-10-2116:40seancorfieldThere's an irony there: Depot 1.8.4 actually will use the project deps by default and does The. Right. Thing. and that is how we use it. Depot 2.x does not -- it reads the deps.edn files you tell it, and that actually breaks our setup.#2019-10-2116:42seancorfieldAre :config-user and :config-project new in -Sdescribe @U064X3EF3 or have I just not noticed them before?#2019-10-2116:44Alex Miller (Clojure team)doh. yes, :config-user and :config-project are new in -Sdescribe as well#2019-10-2207:58danielcomptonClojurists Together is going to be funding 4 projects $9,000 each. Check out what kinds of projects our members are looking for: https://www.clojuriststogether.org/news/q4-2019-survey-results/. Applications close Saturday, October 26th, 2019 at 11:59pm PST.#2019-10-2208:00dominicmJuly?#2019-10-2208:02danielcomptonOops, October 26th!#2019-10-2208:05pez> The developments on Fireplace and CIDER were of no use for us, because we use Cursive. I hope the next projects won't only benefit VIM/Emacs users. A strange perspective, I think. There is a super easy way to sponsor Cursive already!#2019-10-2208:06dominicmI guess the request is for general-purpose clojure enhancements.#2019-10-2209:06arnaud_bos"Could do better" > Recurring, monthly sponsorship of certain "essential" projects (e.g. leiningen and cider come to mind) Good idea but people should look into Patreon for this kind of thing.#2019-10-2209:40borkdudeThere's other donation options too (configurable behind the sponsors button Github for example)#2019-10-2210:02vemv> The developments on Fireplace and CIDER were of no use for us, because we use Cursive. I hope the next projects won't only benefit VIM/Emacs users. CIDER, (specifically cider-nrepl, refactor-nrepl) is editor-agnostic tooling. You certainly can leverage it from a vanilla repl, or from arbitrary participating editors Best explained in this series: https://metaredux.com/posts/2018/11/09/ciders-orchard-the-heart.html#2019-10-2210:05slipsetIf I were to think very hard, the only thing that I'm "missing" is a good code-analysis tool for Clojure.#2019-10-2210:06slipsetNot saying SonarCube is the greatest thing ever, but some of the things it brings to the table is quite useful.#2019-10-2210:07slipsetI guess making a tool of some sort which integrates some of the stuff found here https://blog.jeaye.com/2017/08/31/clojure-code-quality/ would be of interest.#2019-10-2210:11vemv@U04V5VAUN: Coming soon 🙂 https://clojars.org/formatting-stack available, but its github counterpart is still private since we cannot offer support to the wider public yet 🙂 Bundles Eastwood, bikeshed, cljfmt, kondo et al. Open to arbitrary formatters/linters via a simple protocol. Aiming to a release around december#2019-10-2210:12slipsetCool!#2019-10-2210:13slipsetI sto^H^H^Hforked some code some time ago and hacked a bit on it to do#2019-10-2210:13slipsethttps://github.com/slipset/analyse-this#2019-10-2210:13slipsetIt's a very simple (and probably bad) code-complexity analyzer.#2019-10-2210:54dominicmfunding cider funds cider.el & cider-nrepl. So it's not all agnostic. However, all of the major free editors have been funded now I think (maybe not atom/chlorine?). And vscode/fireplace/cider all benefited from each others.#2019-10-2210:54dominicmBut I understand how perception could be that way.#2019-10-2210:57borkdudeI actually don't care that much if I'm going to use all the specific tools that Clojurists Together funds. Investing in better tooling is good for the community overall and I'm benefiting from a better, bigger community.#2019-10-2212:35blueberryNew book release 0.11.0 sheepy sheepy sheepy Adaptive Learning Rates: RMSprop and Adam https://aiprobook.com/deep-learning-for-programmers/#2019-10-2213:22mpenetNew & improved exoscale/ex (formerly mpenet/ex) is available -> https://github.com/exoscale/ex#2019-10-2318:33jacekschaeThis week on https://clojurescriptpodcast.com Vim editor setup for #clojure #clojurescript development with @dominicm#2019-10-2409:16borkdudeVSCode extension for clj-kondo, all in one, so no external dependencies needed. Also works on Windows. https://marketplace.visualstudio.com/items?itemName=borkdude.clj-kondo It will be bundled with Calva (cc @pez), so if you're already using that, it will come your way.#2019-10-2505:40Crispinsimple command line tool to render hiccup templates into html. single, fast, native binary (via graal) for linux. Java uberjar for the others.#2019-10-2505:40Crispinhttps://github.com/retrogradeorbit/bootleg#2019-10-2506:59borkdude@U1QQJJK89 Interesting. I wanted to add this feature to jet as well: https://github.com/borkdude/jet/issues/49 But your tool probably goes a bit further than that 🙂#2019-10-2507:00borkdudeWould maybe be nice if you could also add a Mac build#2019-10-2507:06borkdudeHow/where did you implement for expressions in your code?#2019-10-2507:28CrispinHey thanks heaps for sci. And clj-kondo, too!#2019-10-2507:29Crispinexpressions I just pass in to the evaluator directly here: https://github.com/retrogradeorbit/bootleg/blob/master/src/bootleg/core.clj#L61-L63#2019-10-2507:30Crispin(setting path to ".")#2019-10-2507:31CrispinI want a mac build. And I actually had a look over your clj-kondo circle-ci yaml. I want to copy, but I see that circle ci requires a paid monthly account to access mac builds. I investigated travis which has a free account for open source builds. Do you know of any projects building mac artefacts on Travis?#2019-10-2507:38jeroenvandijk@U1QQJJK89 You could look at Github Actions https://github.com/borkdude/closh-sci/blob/master/.github/workflows/deploy.yml#L58#2019-10-2507:39jeroenvandijkNice work btw. I think it's interesting to have the opposite conversion as well (html to hiccup). E.g. for when you are using twitter bootstrap and there only html examples#2019-10-2507:43Crispin@U0FT7SRLP hey thanks! Part of my personal use case is incorporating html templates designed by someone else. Was tricky (and a little hacky) to implement round trip for every conversion type. I have built a test set for them all so they keep working. I will checkout github actions thanks!#2019-10-2507:49borkdude@U1QQJJK89 Mac builds are free on CircleCI for open source. cc @U0K592YDP#2019-10-2507:49borkdudeI don't pay CircleCI to do my clj-kondo builds#2019-10-2507:50borkdude@U0FT7SRLP I want to do the round-trip feature here: https://github.com/borkdude/jet/issues/49#2019-10-2507:51jeroenvandijkCool 🙂#2019-10-2507:52Crispin@U04V15CAJ Oh great! That wasn't clear from the circle ci pages. So clj-kondo is circle ci. closh-sci is github actions. Is one preferable to the other? Are you moving away from one and to another? What do you recommend?#2019-10-2507:52jeroenvandijkclojure.pprint/pprint could als be a nice addition#2019-10-2507:52borkdudejet has --pretty which does pprint#2019-10-2507:52jeroenvandijkawesome 🙂#2019-10-2507:52jeroenvandijksorry#2019-10-2507:52Crispinpprint is already included. using fipp. native-image wouldnt work with pprint#2019-10-2507:53borkdudesame for jet, also uses fipp#2019-10-2507:53Crispinwell I had problems with it#2019-10-2507:53borkdude@U1QQJJK89 closh-sci is not really something you should look at right now, it's a WIP repo which will disappear soon. I'm not moving away from CircleCI as I'm happy with it.#2019-10-2507:54borkdudeCompared to GH actions it offers deps caching and SSH access#2019-10-2507:54borkdudeHaving said that, GH actions is bloody fast for GraalVM builds#2019-10-2507:55borkdudeoh, you're actually using sci, I see 🙂#2019-10-2507:57Crispinyes! thankyou very much for all your hard work. clj-kondo was actually the gateway project that got me following your work. Using it with flycheck really improved my emacs experience. And then I discovered sci.#2019-10-2507:59borkdudeThanks! Nice to see sci is finding it's way into binary Clojure apps 🙂#2019-10-2508:03CrispinI want to include the enlive macros into the evaluated code namespace. How is best to do that? Would I just prepend defmacro definitions to the evaluated text? Are you hatching some other way?#2019-10-2508:04borkdudeyou can try adding the macros like this:
{:bindings {'mymacro (with-meta @#'my-macro {:sci/macro true})}}
#2019-10-2508:05borkdudebut you'll need to upgrade to a newer sci for this#2019-10-2508:05borkdude0.0.11-alpha.2#2019-10-2508:06borkdudesee: https://github.com/borkdude/sci/blob/master/CHANGES.md#2019-10-2508:13borkdude@U1QQJJK89
(sci/eval-string "(bcond false :foo true :bar)" {:bindings {'bcond (with-meta @#'cond {:sci/macro true})}})
:bar
#2019-10-2508:19borkdudeAdded an issue to document this: https://github.com/borkdude/sci/issues/125#2019-10-2509:45Crispin#2019-10-2509:45Crispindidn't work 😞#2019-10-2509:47borkdudeI've notified Marc about this. I think they need to toggle a flag because they don't enable it by default for everyone.#2019-10-2509:47borkdudeBecause of capacity.#2019-10-2509:47borkdudeBut you'll get it.#2019-10-2509:50borkdudebut if you can't wait, you can also try gh-actions I guess 🙂#2019-10-2509:51CrispinYeah I'll try github actions for now. But gee, circleci looks pretty slick. github integration is very nice.#2019-10-2510:06Marc O'Morainwhat’s the repo?#2019-10-2510:06Marc O'MorainI’ll enable it now#2019-10-2510:07Marc O'Morainretrogradeorbit should have macOS access now#2019-10-2510:07Marc O'Morainyou will need to push a new commit to clear some state in our system#2019-10-2510:16borkdude^ @U1QQJJK89#2019-10-2511:09Crispin@U0K592YDP @U04V15CAJ Thankyou so much. will give it a test#2019-10-2516:49Crispin@U04V15CAJ I have some test prelease builds up here: https://github.com/retrogradeorbit/bootleg/releases/tag/v0.1.5-alpha.1#2019-10-2516:49Crispinif you try any let me know how they go#2019-10-2516:50CrispinI basically just copied your clj-kondo recipes wholesale 👍#2019-10-2516:59Crispin@U0K592YDP thanks again for your help. Mac users are now included in the fun!#2019-10-2517:00Marc O'Morain👍👍#2019-10-2517:00borkdude@U1QQJJK89 awesome. how did you make the Windows build?#2019-10-2600:44Crispin@U04V15CAJ with appveyor. again copying clj-kondo. graal is still experimental on windows though. Had to disable https support: https://github.com/oracle/graal/issues/1672#2019-10-2607:49borkdudeBut does it work well on Windows? I haven't had much luck with clj-kondo on Windows 🙂#2019-10-2609:36Crispinno idea! I don't run windows at all. I guess I'll just wait for windows users to open tickets if it doesn't work. 😅#2019-10-2610:04borkdudehehe#2019-10-2509:39alzaAny DJ's in here? 🎶🙂 https://github.com/digital-dj-tools/dj-data-converter#2019-10-2509:43vemvnice stuff, will take a look! there's also the https://github.com/Deep-Symmetry stuff#2019-10-2510:58Jakub Holý (HolyJak)I have created #atom-editor for Atom users to help each other, announce plugins etc. Join!#2019-10-2514:31practicalli-johnFYI - there are a number of related Atom channels, #protorepl #proton and #editors. Only #chlorine seems to have active discussions though. I would be interested to hear what people are doing with Atom though, outside of Chlorine#2019-10-2520:26dchelimskyCognitect Labs' aws-api 0.0.8.391 https://groups.google.com/forum/#!topic/clojure/j3rBeZHHtHs#2019-10-2523:35andy.fingerhutcore.rrb-vector version 0.1.1: https://groups.google.com/d/msg/clojure/awoMDY9IlqA/7JJuO0ozAQAJ#2019-10-2610:04borkdudeclj-kondo v2019.10.26: - Windows support via LSP and NPM - Major improvement in parser feedback when typing unbalanced parens and more! https://github.com/borkdude/clj-kondo/releases/tag/v2019.10.26 Follow up in #clj-kondo.#2019-10-2815:57otfromtyping unbalanced parens? 😉 #paredit4life#2019-10-2815:59borkdude@U0525KG62 some people don't know paredit yet (beginners) and some other people (of course not me... cparen) sometimes copy paste code which is unbalanced.#2019-10-2816:00otfromI know. This is really cool and will be helpful for a lot of people. Thx for the new version!#2019-10-2816:00borkdudeThank @U0K592YDP for the parsing improvements 🙂#2019-10-2612:01practicalli-johnPracticalli Clojure YouTube channel - 50 videos to help you discover the fun in functional programming with Clojure https://www.youtube.com/playlist?list=PLpr9V-R8ZxiDjyU7cQYWOEFBDR1t7t0wv https://practicalli.github.io/#2019-10-2612:11borkdudeThis is awesome.#2019-10-2621:59borkdudeBabashka, a native scripting tool for Clojure, v0.0.22: support for reader conditionals: https://github.com/borkdude/babashka#reader-conditionals#2019-10-2622:04borkdudeImplementation detail: to make this work, I also had to add support for reader conditionals to sci and edamame:
(edamame/parse-string "[1 2 #
#2019-10-2718:40Ivan Fedorovpage-renderer 0.4.3 - Improved Java 8 support, with proper asset hashing now - Better service workers with for more consistent updates of your app. https://github.com/spacegangster/page-renderer#2019-10-2813:05Bingen Galartza IparragirreWe just released a Duct library for interacting with the Webflow CMS API (For now, mainly for the e-commerce API)#2019-10-2813:05Bingen Galartza Iparragirrehttps://github.com/magnetcoop/cms.webflow#2019-10-2901:22tony.kayI’ve created a library that is like a pared-down version of Ghostwheel, but that works in a way that is more amenable for use as a type-like system for clj(s) development. It limits dependencies, and allows you finer control over how specs are applied to functions. Basically, you can co-locate declarations of expected args and return type with functions, then turn on/off an advisory or enforced (thrown exception) variant. Productions builds can choose not to suffer from any performance penalty or increase in build size. https://github.com/fulcrologic/guardrails/ NOTE: Alpha quality at this point. I’m sure I overlooked something…#2019-10-2908:16jaihindhreddyNice lil' throwback to Simple Made Easy#2019-10-3011:31kwladykaI wrote an article about ClojureScript form validation using spec: https://clojure.wladyka.eu/posts/form-validation/ This article is also a solution for Clojure backend API to respond with human readable errors. --- I encourage to try my library for ClojureScript form validation using spec https://github.com/kwladyka/form-validator-cljs Here is a demo https://kwladyka.github.io/form-validator-cljs/ --- Please give me feedback if you like / dislike it and what I can do better for you.#2019-10-3014:54kennyInteresting approach. This requires you to write your specs always using a s/def, correct? i.e., you cannot use inline functions in an s/and#2019-10-3015:55kwladykayes, because you use this (s/def ::email ...) keyword to determine what invalidated the map#2019-10-3015:59kwladykaanother approach is to assign to each input field spec definition seprately instead of using ::form
(-> {:names->value {:email ""
                    :password ""}
     :form-spec ::form
     :names->validators {:email [email-exist?]
                         :password-repeat [password-repeat? ::spec-key]}}
    (form-validator/init-form))
In library which I made you can use one global spec, which is the whole form and you can additionally define spec for each map key {:password-repeat [password-repeat? ::spec-key]} So here you can set ::spec-key additionaly besides of ::form.
#2019-10-3016:01kwladykacombining 1 spec for whole form and let add additional fn / specs for each form input seems to be fully functional for all you can need#2019-10-3017:11niwinzi have used a similar approach in my own projects, nice article!#2019-10-3021:27Oliver GeorgeUsing :via as a an error code seems nice. Slight conflation perhaps but quite handy. Here's a quick hack in a prototype I wrote recently, great to see others doing similar things.
(defn problems
  [spec data]
  (for [{:keys [path via val]} (::s/problems (s/explain-data spec data))
        :when (seq path)]
    {:path path :code (last via) :val val}))
#2019-10-3021:29kennyFor those interested, we do something similar in https://github.com/Provisdom/user-explain. It lets you dispatch on anything in the explain-data problem rather than just the path.
#2019-10-3013:20athomasoriginalQuick post about deploying CojureScript to a webserver https://betweentwoparens.com/deploy-clojurescript-on-nginx 🎉#2019-10-3018:32jacekschaeThis week on http://clojurescriptpodcast.com we are talking to @roman.bataev about Joker - Small #clojure interpreter and linter#2019-10-3019:14TasosFirst public release. Helpful if you come from go-lang and want to try clojure, or if you work on Windows: https://github.com/tasosx/tools4clj#2019-10-3020:08aviInteresting! The README is solid 👏 One suggestion: in addition to the What is this? section, it’d be helpful if there was also a Why is this? section — i.e. Rationale. Just my 2¢#2019-10-3021:35TasosThank you for your feedback. 😃 The Why? section existed, but eventually transformed to Is it only for Windows? section, and ease of installation/update that golang offered, the Usage section.#2019-10-3115:02aviMy pleasure. Ah I see, yeah it’s always interesting how docs evolve. You might want to bring back the rationale section. Now that those other sections exist, it can be short and sweet.#2019-10-3020:03borkdudeRewrote the parser configuration options for edamame, a configurable EDN parser which attaches location metadata to values. Examples: https://github.com/borkdude/edamame/blob/master/README.md#parser-options API docs: https://cljdoc.org/d/borkdude/edamame/0.0.8-alpha.4/api/edamame.core 100% backwards compatible with the previous options, which have now become undocumented.#2019-10-3109:02slipsetFigured I'd arrange a lunch somewhere in Oslo for Clojure people. Here's a doodle#2019-10-3109:02slipsethttps://doodle.com/poll/nqbk859dqnyisnea#2019-10-3112:38Bingen Galartza IparragirreStripe API integration for the Duct framework#2019-10-3112:38Bingen Galartza Iparragirrehttps://github.com/magnetcoop/payments.stripe#2019-10-3114:31arttukaI published a new library that wraps Material UI v4 for use with Reagent. It includes @material-ui/core, @material-ui/core/styles, @material-ui/icons and @material-ui/pickers, all wrapped to nicely work in Clojurescript. https://github.com/arttuka/reagent-material-ui#2019-11-0107:57Daniel SlutskyHere is the Malli meeting video: https://twitter.com/scicloj/status/1190173919082364928 Many thanks to @ikitommi for the talk, and to @teodorlu for moderating.#2019-11-0110:01borkdude@U066L8B18 Hey, thanks for putting this together. Where do we find scicloj on Clojurians Slack?#2019-11-0110:32otfromin slack, probably in #data-science , but things really happen in zulip https://clojurians.zulipchat.com/#narrow/stream/151924-data-science#2019-11-0110:33otfromand https://clojurians.zulipchat.com/#narrow/stream/203279-scicloj-org#2019-11-0110:37Daniel SlutskyThanks. Yes, in Zulip there are specific streams for certain projects, and for certain aspects of community building. scicloj-org mentioned by @U0525KG62 is the main zulip stream for the people who have decided to be involved in discussing goals and priorities of scicloj community building. It is a private stream, not because it is secret, but as a practice to keep discussions focused on a task group spirit (rather than the broader, public data-science stream). Everybody are invited to join, of course.#2019-11-0118:26seancorfieldorg.clojure/core.memoize {:mvn/version "0.8.2"} -- pluggable memoization based on org.clojure/core.cache {:mvn/version "0.8.2"}; https://github.com/clojure/core.memoize -- provides an easier way to build your own memoization caches via memoizer (the old, harder way with build-memoizer should be considered deprecated); fixes seed function. Follow-up via DM or in #clojure#2019-11-0122:49salamFirefox 71 (beta, developer edition) just received built-in Clojure(Script) syntax highlighting.#2019-11-0201:05yogthosa data flow engine for Clojure/Script https://domino-clj.github.io/#2019-11-0214:17eggsyntaxCool! The change-history is a really nice feature.#2019-11-0305:18yogthosIndeed :)#2019-11-0217:17gklijsRevised open-bank-mark to be simpler and did some other improvements. It's sort of a playground in using kafka with GraphQL (where the default implementation is in Clojure). Repo at https://github.com/openweb-nl/kafka-graphql-examples more details at #graphql#2019-11-0218:41bozhidarThe first ever “State of CIDER” survey is out https://metaredux.com/posts/2019/11/02/state-of-cider.html#2019-11-0220:58vdmit11From your survey, I found out about sayid, gonna try it, thanks.#2019-11-0220:58vdmit11Oh, yes, and by the way, thanks for developing CIDER, it is a really good tool.#2019-11-0221:23borkdudeSubmitted. Curious about the results!#2019-11-0307:51bozhidarMe too! 😄#2019-11-0220:05borkdudethe domain http://re-find.it will expire soon and is now redirected to https://borkdude.github.io/re-find.web#2019-11-0301:10eggsyntaxIf you want to renew it, I imagine we could find a few people to share the cost. I'd certainly kick in, say, $20 a year toward it, maybe a bit more if we come up short. Up to you, of course. Or has it just not been getting any traffic? I've had it bookmarked for ages, but in practice I never think to pull it up...#2019-11-0310:42borkdudeit doesn't have that many users, just a few a day, so I'm fine with just hosting it on github#2019-11-0310:44borkdudeit's not like it's going away#2019-11-0315:40Lennart Buit(I always had trouble with the name, maybe it makes sense to create a landing page that offers links to your tools ^^?)#2019-11-0315:41borkdude@UDF11HLKC sure. for now you can just go to my https://github.com/borkdude page and view the pinned repos#2019-11-0315:42borkdudeor use bookmarks 🙂#2019-11-0315:43Lennart Buitbrrr, 2007 called#2019-11-0315:43borkdudemaybe I should update my website though (that's something I should have done months ago..)#2019-11-0315:43borkdudehaha#2019-11-0315:44Lennart Buit(I have been paying for my domain for years, and it still has no website)#2019-11-0315:44borkdudethanks for making me feel better#2019-11-0319:54borkdudeclj-kondo v2019.11.03: https://github.com/borkdude/clj-kondo/releases/tag/v2019.11.03#2019-11-0411:39plexusI downloaded the download stats from clojars so you don't have to https://github.com/plexus/clojars-stats#2019-11-0411:40martinklepschBut now we have to download them from GitHub 😛 Will this repo be kept up to date automatically?#2019-11-0411:41martinklepschI also wrote some code at some point, downloading stats into a local SQLite database: https://github.com/cljdoc/clojars-stats#2019-11-0411:45plexusgetting them from github should be a lot faster than pulling them off the API. It's not automatically updated, you can easily use the oneliner in the README to get whatever you're missing#2019-11-0411:47martinklepschI see. Would be curious to see how you use jet/babashka to analyze, would be a cool demo for those tools#2019-11-0411:57plexusI might do a nextjournal notebook as soon as I have five minutes of idle time ;)#2019-11-0412:15borkdudeThanks for the shoutout to babashka and jet. Your stats example is here in the gallery: https://github.com/borkdude/babashka/#view-download-statistics-from-clojars#2019-11-0417:04borkdude@U07FP7QJ0 Maybe it makes sense to group those EDN files in one or more subdirectories, since having them on the top level makes loading the Github repo in the browser slow, creates a warning and hides the README#2019-11-0416:53chrisntech.datatype has a new release. We are currently using it for working with forecast datasets which means it is getting tested with high dimensional large numeric datasets. We recently added support for buffered images and for colorizing 1 and 2 dimensional tensors: https://github.com/techascent/tech.datatype#2019-11-0416:54chrisnhttps://raw.githubusercontent.com/techascent/tech.datatype/master/docs/images/noon-conus.png#2019-11-0420:18borkdudemissing-test-assertions: https://github.com/borkdude/missing-test-assertions a small library that ... detects missing test assertions#2019-11-0422:29borkdudefound an error in one of my own projects: https://twitter.com/borkdude/status/1191482400599158785#2019-11-0422:53borkdudeRenamed the project.#2019-11-0501:25Alex Miller (Clojure team)tools.deps.alpha 0.8.578, clj 1.10.1.483 are now available:
* TDEPS-142 - fix for :paths replacement in alias ignored when using :deps replacement in alias - thanks to Vlad Protsenko for the report
* Switched ruby used in brew install to brew's internal ruby - this both reduces variability and may(?) allow the brew install to work on Linux brew (feedback wanted in #tools-deps)
#2019-11-0502:27mauricio.szaboJust published Atom Socket REPL package Chlorine - v0.3.2. Small fixes on the way to parse Clojure forms on the editor, fixed some edge cases and better error treatment when connecting to REPL. But the biggest feature on this 0.3.x version is: Babashka, Joker, Lumo, Plank and ClojureCLR are now supported! Its possible to connect these REPLs, evaluate forms, and even some autocomplete works (except on Babashka)! Discussions on #chlorine channel.#2019-11-0504:16danielcompton🎉I'm excited to announce that Clojurists Together is funding Expound, Deep Diamond (Neanderthal), libpython-clj, and Oz $9,000 each over the next three months - https://www.clojuriststogether.org/news/q4-2019-funding-announcement/#2019-11-0512:34vlaaad#cljfx 1.6.0 adds significant improvement: Java 8 support! As you might know, JavaFX was previously included in JRE, but starting with JDK 11 it was removed and now is available as separate dependency, incompatible with Java 8. With 1.6.0 update, you can use cljfx both with java 8 and java 11, and correct dependencies are picked up by maven automatically. See updated section in README: https://github.com/cljfx/cljfx#installation-and-requirements#2019-11-0515:33vlaaadIn #cljfx land, CSS stands for Charmingly Simple Styling. This is initial release of https://github.com/cljfx/css — css library for cljfx (and other JavaFX-based applications).#2019-11-0608:04jacekschaethis week on https://clojurescriptpodcast.com clj-kondo with @borkdude#2019-11-0614:37nonrecursiveReleased Specmonstah 2, a library for writing clear and concise test fixtures: https://github.com/reifyhealth/specmonstah#2019-11-0616:09plexusI'm guessing not much has changed since alpha-2?#2019-11-0617:47nonrecursivethat’s right 🙂 just one minor tweak, added additional validation on add-ents#2019-11-0818:48Jakub Holý (HolyJak)"Test" not text I guess :)#2019-11-0820:13nonrecursivelol yes, thank you 🙂#2019-11-0616:20ikitommiHot New Release of Sieppari - a small, fast, and complete interceptor library! • [metosin/sieppari "0.0.0-alpha8"] (117,963 downloads in clojars partywombat) • better handling of async exceptions • dropped implicit support for core.async & manifold -> users need to require sieppari.async.core-async or sieppari.async.manifold to get those • oob support for java.util.concurrent.CompletionStage, e.g. promesa, manifold, pohjavirta, porsas & co • https://github.com/metosin/sieppari#2019-11-0616:23richiardiandreaNice! Thank you!#2019-11-0710:38ikitommiThanks! There will one big refactor before a non-alpha release out - more explicit config and an optimizing compiler for kick-ass perf. Might be 1.0.0 directly.#2019-11-0619:29kwladykahttps://github.com/kwladyka/form-validator-cljs Added clojars deployment in Continuous Deployment. Finally you can easy use library in deps.edn and also lein and boot by release version. 2 good reasons to look on this library: 1) If you need form validation using spec in ClojureScript. 2) If you want to learn how to make Continuous Deployment using github actions and deps.edn to clojars look on this file https://github.com/kwladyka/form-validator-cljs/blob/master/.github/workflows/clojars.yaml and https://github.com/kwladyka/form-validator-cljs/blob/master/pom.xml Feel free to use my github actions work in your project. It is free in public projects and soon will be official in github. 14 of November or something like that. Now I have access to it as beta tester. --- Big thanks for @seancorfield for helping me learn how to deploy to clojars ❤️ Also thanks in random order for @alexmiller @vlaaad @lilactown ❤️ I hope I didn’t miss anybody 😱#2019-11-0620:20borkdudeEdamame v0.0.8 https://github.com/borkdude/edamame/releases/tag/v0.0.8 Edamame is a configurable EDN/code parser which attaches location metadata. Follow up in #babashka (which uses this as a lib).#2019-11-0621:47pezEdamame is delicious!#2019-11-0712:59OlicalConjure v2.1.0 is out with support for evaluating a form at any given Neovim mark! https://asciinema.org/a/279763 This means you can evaluate things from other parts of your buffer while you work elsewhere, or even in different files and namespaces! https://github.com/Olical/conjure - intro guide https://oli.me.uk/getting-started-with-clojure-neovim-and-conjure-in-minutes/#2019-11-0713:10henrikI’m looking forward to the forthcoming idiot->wizard video. 🙂#2019-11-0713:12OlicalHaha, a great name for a training series.#2019-11-0713:13OlicalOr maybe wizard school? I'm guessing Hogwarts has some copyright restrictions 😬#2019-11-0714:49henrikMaybe acolyte->wizard would be better, as “idiot” literally means “person that doesn’t vote” in ancient Greek, and we don’t want to upset any ancient greeks.#2019-11-0714:50OlicalTIL!#2019-11-0714:51OlicalYeah, I wouldn't want to upset anyone or call anyone an idiot. A video series getting people proficient with conjure might be good though. Or more posts on my https://oli.me.uk site#2019-11-0714:55henrikPersonally, I’d be very interested in the nothing-to-REPL-up-and-running scenario, as I’m entirely new to vim, neo or otherwise. Motivationally, I would find it much easier to learn vim around the REPL than to learn vim in order to get to the REPL, if you know what I mean.#2019-11-0716:06OlicalAh that's very interesting. Maybe a video series / live session for newbies would be good. Like an online follow along session for getting started from nothing with a bunch of plugins and stuff :thinking_face:#2019-11-0714:18dominicmAnnouncing the initial public release of Clip (0.10.0). Clip is a dependency injection library akin to Integrant or Component that requires no modification to existing Clojure code. It works for both Clojure & ClojureScript, Sync & Async, Code & Data. Contributions of all kinds are welcome, at this stage design feedback is still very welcome. https://github.com/juxt/clip Discussions in #juxt#2019-11-0714:23vemvCan one create multiple systems with it?#2019-11-0714:24dominicmYeah. Systems are reified, so you can def as many as you like and then start them. The concept of a system isn't a singleton.#2019-11-0714:56timgilbertI'd be curious to see a comparison between this and integrant / mount / component...#2019-11-0714:59pithyless@U09LZR36F README mentions https://github.com/juxt/clip-example -> which is 404#2019-11-0715:00dominicmhttps://github.com/dharrigan/nextjdbc-clip is a for example for now. I need to port the rename to the example :)#2019-11-0715:01dominicm@U08QZ7Y5S there's a handful of references to integrant/component in the rationale, or did you have something else in mind?#2019-11-0715:03timgilbertAh, I see them now, but I missed them on a quick scan. I guess I was looking for a more direct "comparison to other libraries" section. No big deal though#2019-11-0715:04timgilbertLooks cool!#2019-11-0715:05dominicmThat's probably a doc worth writing. I'll open an issue and tag you, if you don't get there first.#2019-11-0715:05vemvA comparison table could be killer Some points aside from the obvious: - suspendability - whether the system is reified (already addressed)#2019-11-0715:06dominicmSuspension is not yet done. But is coming. I think there's an issue for this.#2019-11-0715:24jeroenvandijk@UEM4BH7B3 Since you write that requires no modification to existing Clojure code is the main reason for its existence refactoring legacy applications?#2019-11-0715:52dominicm@U0FT7SRLP not really. Although I think it would be a great fit there. I was frustrated at constantly adapting functions into multi methods and records. If you build granular systems, it's quite frustrating, you end up with 3-line multi methods which defer to a function doing the work. I wanted to capture the ability to write idiomatic clojure code, the kind I would put in a library without hesitation, and not have to make it aware of a particular state library. One of the other benefits I was looking for was docstrings, which vars naturally support. Something I want to explore further is for personal development setups, rather than having a pre-defined dev system. Somehow tying that into minimalistic repl driven development. But that's a major WIP for me.#2019-11-0716:20jeroenvandijk@UEM4BH7B3 Thanks for explaining, make sense! The introduction of async is also interesting. I'm curious how this can be applied#2019-11-0716:24dominicmThe async? We use async in a project to setup re-graph. But that project has a custom system, so I made a new custom system library.#2019-11-0716:33jeroenvandijkMaybe I'm thinking too much from a component perspective. I'll read the documentation better#2019-11-0716:52dominicmThe idea is that when you return something async, dependent components won't have their start called until the async thing is resolved.#2019-11-0716:52dominicmSo the async is transparent.#2019-11-0717:46p-himikAre there any plans to eventually start using it in Edge?#2019-11-0718:01dominicmYeah. It's on my list. Going into the JUXT website next week, so it'll probably be done in parallel#2019-11-0721:42dominicmI've fixed the link to the clip example#2019-11-0811:37dominicmTo clarify, it'll be unofficially supported in edge, but probably won't be documented until I've used it a few times and I'm happy.#2019-11-0811:38borkdudeShip it.#2019-11-0812:51dominicmDocumented a comparison with other libraries https://github.com/juxt/clip#comparison-with-other-libraries feedback welcome on other tabs worth having#2019-11-0818:18cjsauer@U09LZR36F thanks for sharing! Just curious, what is the inspiration for the name “clip”?#2019-11-0818:41dominicm@U6GFE9HS7 In the sense of "to fasten together"#2019-11-0717:10blueberryNew release 0.12.0 available! sheepy sheepy sheepy https://aiprobook.com/deep-learning-for-programmers?release=0.12.0&amp;source=cslack#2019-11-0801:47yogthosNew release of Domino includes event triggers, interceptors , and improved API based on user feedback. Full change log here: https://github.com/domino-clj/domino/blob/master/CHANGES.md Domino also plays nicely with re-frame, see below for example usage: https://domino-clj.github.io/demo#2019-11-0803:28Candidjoker v0.13.0: https://github.com/candid82/joker/releases/tag/v0.13.0#2019-11-0803:38tony.kayFulcro 3.0.8. This version now includes easier to use support for returning binary values from server mutations (e.g. dynamically generated PDF). https://github.com/fulcrologic/fulcro#2019-11-0814:07borkdudeclj-kondo 2019.11.07 - Datalog linting and more! https://github.com/borkdude/clj-kondo/releases/tag/v2019.11.07#2019-11-0814:23borkdudeBlog about Datalog linting by LambdaForge: https://lambdaforge.io/2019/11/08/clj-kondo-datalog-support.html#2019-11-0902:38tony.kayFulcro 3.0.10 is on Clojars. I’ve added support for easily attaching file uploads into the context of mutations so that the uploads simply appear as part of your normal transaction. There’s a YouTube video that shows the basics: https://youtu.be/Tab_6JWOxSQ#2019-11-0903:52CrispinBootleg 0.1.5 is released. With selmer support, enlive macros, filesystem functions like globbing, better error messages and builds for linux, mac and windows https://github.com/retrogradeorbit/bootleg#2019-11-0910:21borkdudeAdded to https://github.com/lread/clj-graal-docs/blob/master/doc/external-resources.md Feel free to add any information you found useful to know when working on your project.#2019-11-0912:32Crispinwill do. I do have some things to add.#2019-11-0912:46borkdudePlease do 🙂#2019-11-0912:55CrispinPR sent#2019-11-0913:00borkdudemerged 🙂#2019-11-1118:29borkdudemissing.test.assertions v0.0.2: https://github.com/borkdude/missing.test.assertions adds :throw? option#2019-11-1121:17borkdudeBabashka v0.0.26 released. Now with clojure.data.csv! https://github.com/borkdude/babashka/releases/tag/v0.0.26#2019-11-1322:59borkdudeVersion v0.0.27 is now released as well: https://github.com/borkdude/babashka/releases/tag/v0.0.27#2019-11-1222:16Alex Miller (Clojure team)org.clojure/core.async 0.5.527 is now available#2019-11-1222:16Alex Miller (Clojure team)core.async 0.5.527 is now available. In general, you should never directly or indirectly use blocking IO operations in go block threads. The go block threads are a fixed pool of (by default 8) threads. If you block enough of these threads, you lock up the pool, potentially in unrecoverable ways. This release contains a new Java system property (intended primarily for development use) that will throw if core.async blocking operations (anything ending in "!!") are used in a go block. The exception will be thrown in a go block thread which by default will bubble up to the ThreadGroup's uncaught exception handler and get printed to stderr. You can also set Thread.setDefaultUncaughtExceptionHandler() if you want to do something else. Note that this only catches one set of blocking calls, other blocking IO is equally as problematic and will not be caught with this flag. Example:
clj -J-Dclojure.core.async.go-checking=true

user=> (require '[clojure.core.async :as a])
nil
user=> (def c (a/chan 10))
#'user/c
user=> (a/go (a/>!! c 100))
#object[clojure.core.async.impl.channels.ManyToManyChannel 0x77a14911 "
When running source from a file, the NO_SOURCE_FILE lines will point to the offending file and line performing the blocking operation (here those on the REPL). Additionally, the pipeline api call has been modified, both to respect the policy above and to address issues with reusing the go block thread pool for pipeline concurrency (capped by go block thread pool size). The api docs have been regenerated: https://clojure.github.io/core.async
#2019-11-1222:19borkdudeThat's a great feature, thanks.#2019-11-1223:15roklenarcicI think it would be fair to say that any go block should not do significant work and should quickly get to an IOC operation to release the thread it’s using#2019-11-1300:03hlshipMy rule of thumb is thread to do work go to do orchestration.#2019-11-1307:47jacekschaeClojureScript Podcast out until 2020 https://soundcloud.com/user-959992602/s2-e11-out-until-next-year#2019-11-1310:18mirohi guys! A new release of titanoboa (0.8.1) is now available. Most notable changes: - Simplified API for Webhooks - this makes it easier to use Titanoboa as a full-blown iPaaS, e.g. as a Zapier alternative 🚀 (read more on wiki https://github.com/mikub/titanoboa/wiki/API-Documentation#start-job-via-a-webhook-simplified-api ) - bug fixes - a bug in file upload and also a bug in GUI's code auto-complete are now fixed https://github.com/mikub/titanoboa#2019-11-1322:04kipzhttps://clojars.org/com.taoensso/faraday/versions/1.10.0#2019-11-1503:41seancorfieldseancorfield/next.jdbc {:mvn/version "1.0.10"} -- The next generation Clojure wrapper for JDBC-based database access -- https://github.com/seancorfield/next-jdbc -- all follow-up to #sql please! Enhancements: * Fix #75 by adding support for java.sql.Statement to plan, execute!, and execute-one!. * Fix #73 by providing a new, optional namespace next.jdbc.date-time that can be required if your database driver needs assistance converting java.util.Date (PostgreSQL!) or the Java Time types to SQL timestamp (or SQL date/`time`). * Address #70 by adding CLOB & BLOB SQL Types to the Tips & Tricks section of Friendly SQL Functions and by adding next.jdbc.result-set/clob-column-reader and next.jdbc.result-set/clob->string helper to make it easier to deal with CLOB column data. Documentation: * Fix link to All The Options in Migration from clojure.java.jdbc. PR #71 (@laurio). * Clarify what execute! and execute-one! produce when the result set is empty (`[]` and nil respectively, and there are now tests for this). Similarly for find-by-keys and get-by-id. * Add MS SQL Server section to Tips & Tricks to note that returns an empty string for table names by default (so table-qualified column names are not available). Using the :result-type (scroll) and :concurrency options will cause table names to be returned. * Clarify that Friendly SQL Functions are deliberately simple (hint: they will not be enhanced or expanded -- use plan, execute!, and execute-one! instead, with a DSL library if you want!). * Improve migration docs: explicitly recommend the use of a datasource for code that needs to work with both clojure.java.jdbc and next.jdbc; add caveats about column name conflicts (in several places). * Improve datafy/`nav` documentation around :schema. Miscellaneous: * Address #74 by making several small changes to satisfy Eastwood. * Update org.clojure/java.data to "0.1.4" (0.1.2 fixes a number of reflection warnings).#2019-11-1610:55borkdudebabashka, a native scripting tool for Clojure, v0.0.28: https://github.com/borkdude/babashka/releases/tag/v0.0.28 Java interop support via reflection.#2019-11-1622:26borkdudev0.0.29 adds binding, with-out-str and with-in-str#2019-11-1620:07blueberryIn case anyone is interested in this preview, here's the link for my ClojureConj 2019 slides: https://dragan.rocks/talks/ClojureConj2019/ipai.html#2019-11-1721:15mauricio.szaboJust published a new version of Atom package Chlorine, and on this version there's support for an (experimental!) copy to clipboard command on evaluation results. It also adds preliminary suport for Arcadia REPL, and fixes some problems with rendering 🙂#2019-11-1817:00Ivan FedorovVideos from the Russian Clojure conference, featuring: - Niqola Ryzhikov – Test front on the back. clj, cljs, re-frame + some engineering thoughts - Vlad Bokov – Hacking on clojure.core & runtime - Ivan Grishaev – Datalog on top of SQL - Mike Ananev (Sberbank) – Data ecosystems. Data-driven approach to build a B2B metadata system. - Lev Rasskazov - Managing stateful objects and dependencies between them - Alexey Kudryavtsev (Arrival) - Versioning in Datomic: Beyond History API https://youtube.com/playlist?list=PLvf-wiCQYkAVvrZr53Upxti9Hr3t7V4bW#2019-11-1817:13Ivan FedorovJoin us next October! Moscow is full of nice places, well worth making a visa. We’ll make sure you’re warmly welcome 🙂#2019-11-1915:01yogthosnew Domino is out with async events and triggers for generating inputs via effects https://github.com/domino-clj/domino/blob/master/CHANGES.md#2019-11-1916:43Alex Miller (Clojure team)ClojureScript 1.10.597 is now available! https://clojurescript.org/news/2019-11-18-release - Node REPL improvements, Google Closure JS analysis, enhanced type#2019-11-1917:53pez> Google Closure JS analysis I saw that demoed on Apropos yesterday. Super mega awesome!#2019-11-2000:21plexusI can't find anything in the changelog about Node REPL improvements. Am I missing something?#2019-11-1922:44carocadParcera v0.4.0 is out now using Antlr4 instead of Instaparse for upmost performance. Please check the release notes for specifics: https://github.com/carocad/parcera/releases/tag/v0.4.0#2019-11-2001:05dominicm@U04V15CAJ release notes contain benchmarks 🙂#2019-11-2007:59borkdudeThat’s more in the balllpark of tools.reader based solutions #2019-11-2008:07borkdudeNice work @U0LJU20SJ !#2019-11-2008:55carocad@U04V15CAJ @U09LZR36F it would be interesting for me to know how you guys are using such parsers. I think that parcera can be even faster by avoiding the conversion to clojure lazy seqs. Any hints on your use cases 🙂 ?#2019-11-2008:57borkdude@U0LJU20SJ I'm using rewrite-clj for parsing in clj-kondo#2019-11-2008:58borkdudeAnd edamame in https://github.com/borkdude/sci and https://github.com/borkdude/babashka/ So two use cases for me: analysis and execution (which also involves analysis)#2019-11-2009:03carocadI meant it a bit more specific 😅 . so rewrite-clj uses a zipper right ? do you modify the structure inline pass it forward or do you perform some side effects while traversing it ?#2019-11-2009:21borkdudeI don't use the zipper part from rewrite-clj for processing#2019-11-2009:24borkdudeI do use side effects while processing#2019-11-2010:38carocad> I do use side effects while processing interesting. I am thinking of making an api for looping through the ast without building a collection which should make parcera even faster. If you could help me sketch it out (github issue) it would be an awesome help 🙂#2019-11-2010:42borkdudebtw, does parcera also attach location metadata?#2019-11-2010:44borkdudebtw, I see antlr4 also supports generating a JS target: https://github.com/antlr/antlr4/blob/master/doc/javascript-target.md#2019-11-2011:20borkdudeas for the API, you could support a visitor function, that gets to see every parsed node in the tree? I don't know exactly what it would look like. just try to build an app like a linter or evaluator and you will quickly discover what is needed probably#2019-11-2011:21borkdudemaybe the visitor function would also need to see the parent or children in some cases, so I don't know if side-effect only without the tree works for all cases#2019-11-2012:43borkdude@U0LJU20SJ The best way to discover what works is building actual tools with it.#2019-11-2012:48borkdudebtw, when trying out parcera 0.4.0 I get:
$ clj -Sdeps '{:deps {carocad/parcera {:mvn/version "RELEASE"} org.antlr/antlr4-runtime {:mvn/version "4.7.1"}}}'
Clojure 1.10.1
user=> (require '[parcera.core])
Syntax error (ClassNotFoundException) compiling at (parcera/antlr/java.clj:1:1).
parcera.antlr.ClojureParser
user=>
#2019-11-2013:04carocad@U04V15CAJ you need to add antlr-runtime to your deps. See usage: https://github.com/carocad/parcera#usage#2019-11-2013:04borkdudeI did, see my :deps#2019-11-2013:05borkdudemaybe your dependency has to package compiled classes?#2019-11-2013:05borkdudeit expects the class parcera.antlr.ClojureParser to be around, which doesn't seem to be in your dep#2019-11-2013:05carocadoh sorry my mistake. It seems that the generated ClojureParser from antlr was not packed :thinking_face: ? I thought that leiningen takes care of that by using the java-sources#2019-11-2013:06borkdudeonly if you call the javac task#2019-11-2013:06borkdudeminor issue: the README still refers to instaparse#2019-11-2013:07carocad> btw, does parcera also attach location metadata? yes > btw, I see antlr4 also supports generating a JS target: yeah, I havent been able to get it working, see https://github.com/carocad/parcera/issues/25#2019-11-2013:07borkdudemajor issue:
:java-source-paths ["src/java"]
this path doesn't seem to be present in your git repo
#2019-11-2013:09carocadthose are automatically generated files, therefore I dont include them in the git history. However it is present when building https://github.com/carocad/parcera/blob/master/.travis.yml#L19#2019-11-2013:11borkdudeok well, maybe it's good to add that to the README then, how to build this stuff#2019-11-2013:14borkdudeis the problem with JS that you do manage to build the JS file, but you don't get it to work with CLJS?#2019-11-2013:14carocadI will take a look at the missing java class. I suspect that publishing is missing the java files … even though I would expect an error if that was the case :thinking_face:#2019-11-2013:15borkdudelike I said, you need the javac task: javac Compile Java source files.#2019-11-2013:15carocad> is the problem with JS that you do manage to build the JS file, but you don’t get it to work with CLJS? yes, when passing the generated js files through closure compiler they “get damaged” and importing doesnt work anymore. Might be my lack of knowledge though#2019-11-2013:16borkdudeok, don't know about :module-type :es6, have you tried without that setting?#2019-11-2013:17borkdudecompile probably doesn't do what you think it does, it AOTs Clojure code, it's not related to Java sources#2019-11-2013:34carocad> ok, don’t know about :module-type :es6, have you tried without that setting? yeah, I tried the other module types and it also didnt work#2019-11-2013:35borkdudewhat if you don't specify a module type, I meant?#2019-11-2013:35carocadI didnt try that 😅 . Will do after I fix the java version 😉#2019-12-0216:33mauricio.szaboI'm also interested on this change! Currently I use rewrite-cljs to parse source files, but it is kinda slow, so I'm hoping these improvements will be handy for my projects :)#2019-12-0313:23carocad@U3Y18N0UC if you have some experience with js -> cljs I am looking for help 🙂 . I am not that experience on it but I do have a branch with a prototype that works on js but not on cljs. Any help is more than welcome#2019-11-2020:56carocadnew release of parcera v0.4.2 fixes a java compilation bug. Thanks a lot to @borkdude for the report and clear insights 🙂 https://github.com/carocad/parcera#2019-11-2021:20borkdudeSeems to work now. The location metadata seems a bit off though?
user=> (p/ast ":foo")
(:code (:simple_keyword "foo"))
user=> (second (p/ast ":foo"))
(:simple_keyword "foo")
user=> (meta (second (p/ast ":foo")))
#:parcera.antlr.java{:start {:row 1, :column 0}, :end {:row 1, :column 1}}
#2019-11-2021:21carocadinteresting, I did encounter a similar problem before but I was pretty sure I fixed it. I guess I need to add more tests 😅#2019-11-2021:22pezCongrats to the release! I’m sorry I haven’t looked at the ClojureScript parts. Just too busy with Calva stuff.#2019-11-2021:23carocadno worries, @U0ETXRFEW it is a contribution not an obligation 😉#2019-11-2021:47carocad@borkdude you are a bug hunter … you just led me to discover another error in my understanding of antlr 🙂. I will push a fix soon#2019-11-2021:55borkdudebabashka v0.0.33: built-in SSL support due to upgrade to GraalVM 19.3.0 https://github.com/borkdude/babashka/releases/tag/v0.0.33#2019-11-2114:22Alex Miller (Clojure team)clj 1.10.1.489, tools.deps.alpha 0.8.599 * TDEPS-143 - Fix: use aliases when generating pom with -Spom * TDEPS-127 - Add: include pom resource directories in dep paths in -Spom (thanks Miikka Koskinen) * TDEPS-140 - Add: support for Maven server HTTP header properties (thanks Arne Brasseur) * Fix: Use of multiple aliases in Windows clj script * Add -Strace for debugging dep expansion#2019-11-2114:32GeromeI created a channel where people can ask the community, if they are looking for a specific library. Drop by and find your library. #find-my-lib#2019-11-2212:39miroHappy Friday! Just wrote a new blog post: Using Titanoboa as an open source alternative to Zapier As usual, feedback is welcome! https://www.titanoboa.io/using-titanoboa-for-cloud-integration.html#2019-11-2219:41Michaël SalihiA simple project using Shadow-CLJS with p5.js (JavaScript library for creative coding) https://github.com/PrestanceDesign/p5-shadow-cljs#2019-11-2315:25tony.kayI’ve started exploring what it would take to build rapid-application development tools in Fulcro. It turns out the answer is “not much” 🙂 Check out this video and repo to see where I’ve gotten in just 4 days of CDD (conference-driven development): https://github.com/fulcrologic/fulcro-rad https://youtu.be/jkx9F-RIFiY I don’t have time to completely build this out by myself, but I’ve already seen significant excitement from people that have seen it. Let me know if contributing might interest you. Think “Generate a web-based, React Native (or perhaps even Desktop) application in a day that supports autogenerated forms, reports, and auth.” All while not tying you to big hairballs 😉#2019-11-2511:42Jakub Holý (HolyJak)Cool! BTW, have you looked at https://github.com/hodur-org/hodur-engine? Its goal is > you can define your domain model as data, parse and validate it, and then either consume your model via an API so there is some overlap and perhaps some lessons to learn...#2019-11-2516:30tony.kayAlready suggested…see #fulcro#2019-11-2316:30borkdudeclj-kondo v2019.11.23: detect unused imports, a working Windows binary and a couple of improvements/bugfixes. https://github.com/borkdude/clj-kondo/releases/tag/v2019.11.23#2019-11-2322:36Filipe SilvaHi all 👋 I've just released v0.3.0 of create-cljs-app that includes a setup using devcards together with react testing-library. I'd love feedback on the user experience, file structure, and cognitive overhead of extra files in the devcards setup. If you have ideas on how these aspects could be improved let me know! You can make an new app with the new template using via yarn create cljs-app my-app or npx create-cljs-app my-app.#2019-11-2413:13carocadparcera v0.5.0 released with (yet another) performance improvement by using datafy. https://github.com/carocad/parcera#2019-11-2415:23Alex Miller (Clojure team)org.clojure/tools.deps.graph - a new tool for making deps diagrams from deps.edn files https://github.com/clojure/tools.deps.graph#2019-11-2415:27Jacques DesmaraisHi Alex, newbie question, but would this work for ClojureScript projects too?#2019-11-2415:50borkdude@UQHRWDGJW As long as the deps are managed by tools.deps what's the difference?#2019-11-2415:58Jacques DesmaraisThanks for your reply @U04V15CAJ, though I’m so new, I have no idea (re: what’s the difference). 😉 I am running into an issue when trying out this tool, and am not getting any answers when googling, so I’ll post the issue in the #beginners section.#2019-11-2416:00borkdude#tools-deps might also work#2019-11-2517:28Alex Miller (Clojure team)@UQHRWDGJW yep, should work!#2019-11-2517:32Jacques DesmaraisThanks @U064X3EF3, BTW I ran into the issue where running clj -A:graph gave me the error Cannot run program "dot": error=2, No such file or directory and someone pointed out that it was probably because I was missing an installation of graphviz, since my setup is so new. Would you like me to open an issue regarding this or, if this is indeed a dependency for tools.deps.graph, then should it be mentioned in the main readme?#2019-11-2517:33borkdude@UQHRWDGJW It says this in the README: > tools.deps.graph uses Graphviz to generate images. You can find a list of platform-specific installations at https://graphviz.gitlab.io/download/.#2019-11-2517:33borkdudeadded 3 hours ago 🙂#2019-11-2517:34Jacques Desmaraisoh LOL :thumbsup:#2019-11-2517:03yogthosClojure/north 2020 is happening from June 25th to 26th 🎉 https://clojurenorth.com/#2019-11-2517:24Alex Miller (Clojure team)send me a pr for http://clojure.org event!#2019-11-2517:53borkdude@UE21H2HHD Closer than ClojureD 🙂#2019-11-2517:56lreadha! maybe I should start training now! 🚴#2019-11-2518:37yogthos@U064X3EF3 oh yeah, will do thanks for the reminder!#2019-11-2518:59carmen@U064X3EF3 PR is here 🙂 https://github.com/clojure/clojure-site/pull/436#2019-11-2518:15chrisnBig improvements to libpython-clj: • Stack based scoping - https://github.com/cnuernber/libpython-clj/blob/master/docs/scopes-and-gc.md • Major stability fixes (mainly thanks to testcases found in production) #2019-11-2601:12Alex Miller (Clojure team)clj 1.10.1.492 is now available - only change is a fix to the clj tool to the conditional logic for tracing that caused a trace.edn file to be written when it wasn't asked for#2019-11-2616:41dchelimskyCognitect Labs' aws-api 0.8.408 is now available! https://groups.google.com/forum/#!topic/clojure/yRAr6e9kAoE#2019-11-2713:38borkdudebb, a native scripting tool for clojure, 0.0.35, small update, add support for namespaces: https://github.com/borkdude/babashka/releases/tag/v0.0.35#2019-11-2715:11tony.kayFulcro 3.0.11 is on clojars. This version has various performance improvements, and a few other touch-ups. If you notice rendering regressions, please report them. https://github.com/fulcrologic/fulcro#2019-11-2815:16mauricio.szaboJust published Chlorine, Atom package for Socket REPL. On this version, fixes on "copy result to clipboard". Discussions, ideas, help on #chlorine channel 🙂.#2019-11-3009:23valeraukoi couldn't find any helper to test ex-info throws so i made one https://github.com/valerauko/harinezumi#2019-11-3017:11pezNew Calva out. Major rewrite of its Paredit implementation. https://clojureverse.org/t/calva-paredit-just-got-majorly-better/5155#2019-12-0517:47Clémentcongrats and thanks for your hard work 🙂#2019-12-0519:04pezThanks!#2019-12-0111:41borkdudeThere is a new way of running clj-kondo in IntelliJ which also works with the community edition: https://github.com/borkdude/clj-kondo/blob/master/doc/editor-integration.md#lsp-server#2019-12-0212:37p-himikThe LSP workflow doesn't require saving a file before running the linter on it, right? Would it be possible to run the LSP server via clj just so that I can add the RELEASE version to my user's deps.edn and stop worrying about the latest version?#2019-12-0213:13borkdude@U2FRKM4TW good idea. Can you try with:
/usr/local/bin/clojure -Sdeps '{:deps {clj-kondo/lsp-server {:mvn/version "RELEASE"} clj-kondo {:mvn/version "RELEASE"}}}' -Sforce -m clj-kondo.lsp-server.main
#2019-12-0213:13borkdudeas the command#2019-12-0213:13borkdude(I think you need -Sforce else to checking of the latest release)#2019-12-0213:14borkdudeIf that works for you, I'll add it to the README#2019-12-0213:52p-himikSeems to work, but I had to increase the init timeout to a minute. Otherwise, I was getting
LanguageServer for definition
 rawCommand : /usr/local/bin/clojure -Sdeps '{:deps {clj-kondo/lsp-server {:mvn/version "RELEASE"} clj-kondo {:mvn/version "RELEASE"}}}' -Sforce -m clj-kondo.lsp-server.main
not initialized after 10s
Check settings
So, I'm not sure about the -Sforce flag. I think with RELEASE, clojure still checks for the latest version. Although, even if you don't specify the flag, the timeout will still probably happen when a new version of clj-kondo is released. Maybe it's worth mentioning the timeout and how to increase it. Another small thing - the guide says the path to the relevant settings section is just at Preferences / Language Server Protocol / Server definitions. The actual path, as given by IDEA itself, is File | Settings | Languages & Frameworks | Language Server Protocol | Server Definition (you can copy it via the context menu of the breadcrumbs section of the settings window).
#2019-12-0213:55borkdudeAre you on Windows?#2019-12-0213:55p-himikUbuntu.#2019-12-0213:55borkdudeThat might be a difference between mac and linux#2019-12-0213:55p-himikHmm, yeah - didn't realize that.#2019-12-0213:55p-himikSo you don't have the Languages & Frameworks part?#2019-12-0213:56borkdudeThe uberjarred version has faster startup. Can you confirm that by trying it?#2019-12-0213:56p-himikOh yeah, it's definitely faster.#2019-12-0213:56borkdudeoh yes, I do. I will correct it.#2019-12-0213:57borkdudeok, then I think that will still be the recommended way#2019-12-0213:57borkdudebut if you make a bash script that downloads the latest one and just replaces the existing by the same name, then you should have what you want#2019-12-0213:58borkdudealmost#2019-12-0213:58p-himikThere are pros and cons to each way of setting this up, I guess. One gives faster startup, although it happens only once at IDEA startup; the other is able to download the latest version for you but requires an additional tuning of the init timeout value.#2019-12-0213:58p-himikRegarding the script - well, if download takes a long time, it will be the same issue.#2019-12-0213:59p-himikclj is slow only when it needs to recompute the classpath. Without the -Sforce flag, the timeout doesn't happen.#2019-12-0214:00borkdudeyes, but the cache is based on a hash of the deps.edn file I think#2019-12-0214:00borkdudeI already had a caching issue when using RELEASE#2019-12-0214:00borkdudethat's why you need -Sforce to make it work reliably#2019-12-0214:01borkdudeofficially RELEASE isn't even supported anymore by a future version of maven#2019-12-0214:01p-himikHuh, interesting. I'll keep an eye on it then. Because I'm almost certain that I've seen it download a new version all by itself when I didn't change the deps file.#2019-12-0214:02p-himikThe absence of RELEASE in Maven isn't really relevant for tools.deps because, I think, it doesn't use Maven. RELEASE can just be a spepcial value for the :mvn/version key. But that's a topic for a different discussion. 🙂#2019-12-0214:09borkdudeyes, but the cache depends on the contents of the deps.edn file#2019-12-0214:09borkdudeand RELEASE is just a constant string#2019-12-0214:09borkdudeanyway, feel free to use it with -Sforce, I just added it because I did have a caching problem just now when I came up with this solution#2019-12-0214:31p-himikAh, almost forgot to say - thank you for making this workflow possible. Using the file watcher was creating just too much churning.#2019-12-0214:35borkdudeSure 🙂#2019-12-0216:20p-himikI just noticed that this folder got created:
lsp
├── conf
│   └── clojure.json
└── log
    ├── clojure_err_20191202.log
    └── clojure_out_20191202.log
The JSON file is empty. I couldn't find any reference to it in the source code of clj-kondo. Where does it come from? Can I safely add the whole folder to gitignore?
#2019-12-0216:21borkdudeI think that is created by the LSP Support plugin.#2019-12-0216:21borkdudeI saw it too on my machine#2019-12-0216:21borkdudemaybe you can find something about it in their docs#2019-12-0216:21borkdudeI added it to .gitignore#2019-12-0216:30p-himikThanks! Yeah, they explicitly say that they create the lsp folder in the project's root.#2019-12-0308:54p-himikJust to correct myself - turns out, the LSP server shuts down each time you close all relevant files, not when you exit IDEA. In this situation, having a high init time is indeed much more detrimental.#2019-12-0309:04borkdudeI think so too.#2019-12-0115:21athomasoriginalWrote a little something about starting with Clojure Text Editors and how one might choose between all the options available: https://betweentwoparens.com/clojure-text-editors#2019-12-0115:22athomasoriginalThoughts are very welcome 🙂#2019-12-0115:35vemvNice one, nuanced. Emacs user here, but I celebrate diversity of choices, particularly to accomodate people coming from different backgrounds. As a random thought, I'd love for people to champion IDE-agnostic tooling. I often see people asking "how do I format|refactor|grep in $editor", when a better approach would be "how to x from the REPL" https://github.com/clojure-emacs/refactor-nrepl is perfectly invokable from the repl for example, and yet probably 90% of its userbase are emacs users.#2019-12-0115:39athomasoriginal100% agreed @U45T93RA6! I think building a culture of education and understanding goes a long way to getting to your point 🙂#2019-12-0115:47vemvExactly :) More broadly, Clojure / Lisps have ways that are deeply different from practically all other mainstream languages. So ones sees the frequent mistake of people doing clj software engineering the same exact way they would in Ruby, or Java... That's pretty wrong, but at the same time one ought to demonstrate some patience and empathy.#2019-12-0116:51ghadiThat’s a brilliant domain name#2019-12-0123:07mauricio.szabo@U45T93RA6 one of the things I think is missing is documentation. If we could document these features better, it would probably be easier for people to invoke then from the REPL, and also easier to integrate on editor's plug-ins too#2019-12-0120:17CandidJoker v0.14.0 is released: https://github.com/candid82/joker/releases/tag/v0.14.0#2019-12-0123:05mauricio.szaboJust published Clover. It is a very experimental package for Socket REPLs on VSCode, based on the same machinery that powers Chlorine (for Atom): https://marketplace.visualstudio.com/items?itemName=mauricioszabo.clover#2019-12-0200:44pezVery cool! I must try it of course. Do you know how compatible the extension is with Calva? I’m thinking since there is a lot of general Clojure editing things in Calva, it would be nice if Clover users could benefit from them. I’ll give Clover some spins and see what I find.#2019-12-0201:08mauricio.szaboI didn't check this compatibility, but it should work fine. Clover does not have any editing, so it would really be nice to benefit from it 🙂#2019-12-0206:20andy.fingerhutTranscripts of two of Rich Hickey's oldest (and longest) talks are now published and available, included in a collection of many other talk transcripts. The newest transcripts are (1) "Clojure Concurrency" from March 2008, where he introduced the fairly well known "ant colony" simulation program to demonstrate refs, transactions, and agents, here: https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/ClojureConcurrency.md . and (2) "Clojure for Java Programmers" from June 2008, here: https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/ClojureForJavaProgrammers.md . That Github repository contains many other talk transcripts. If you are interested in helping create additional transcriptions, I am happy to help edit/polish them if someone wants to volunteer creating a first draft of all or even part of another talk. Offer your time and coordinate efforts on any of the open Github issues for not-yet-transcribed talks in that same Github repo.#2019-12-0207:11LuPublished a cljs library for on scroll animations sheepy https://github.com/luciodale/aqua#2019-12-0216:08blueberryNew book release 0.13.0 available! sheepysheepysheepy https://aiprobook.com/deep-learning-for-programmers?src=rslack&amp;release=0.13.0#2019-12-0221:43paulbutcherI’ve just published a clj template for for an Electron application built with deps.edn, Figwheel Main, Reagent, and test integration via cljs-test-display. https://github.com/paulbutcher/electron-app#2019-12-0300:55hlshipDo you have a thread to discuss this? I'm having some trouble but don't want to spam announcements.#2019-12-0309:38paulbutcherI don’t, but feel free to create a thread on either the #clojurescript or #figwheel-main channels (whichever you feel might be most relevant) and mention me…#2019-12-0223:01DumchMade a pwa app example in Clojure https://github.com/Liverm0r/PWA-clojure#2019-12-0315:00Alex Miller (Clojure team)tools.analyzer.jvm 0.7.3 is available with deps bumped to latest tools.reader, core.memoize etc#2019-12-0316:31Alex Miller (Clojure team)core.async 0.6.532 is also available, with bumped dep to latest tools.analyzer.jvm#2019-12-0318:39otfromAlways happy to see core.async get some ♥️#2019-12-0319:24Alex Miller (Clojure team)I am work on a bunch of docs for it (better late than never, right?)#2019-12-0409:42otfromthat is awesome. It would be good to get more of a steer on good ways of using it. I'm mostly using it for conveyor belts of data to different reducing functions, but not for concurrency when doing data processing. The place I use it for concurrency is when doing UI work.#2019-12-0413:12Alex Miller (Clojure team)Sounds right to me#2019-12-0414:07otfrom🎊 😄 🎊#2019-12-0409:35CrispinBootleg 0.1.6 released: Support for reagent style hiccup like {:style {:margin-top "8px"}} and nil forms. Better error messages. And various bug fixes. https://github.com/retrogradeorbit/bootleg#2019-12-0510:09skuroDutch Clojure Days, the free yearly conference of Clojure enthusiasts and practitioners in the Netherlands, is scheduled to happen in Amsterdam on Saturday, May 16th. You can already register your spot (https://www.eventbrite.com/e/dutch-clojure-day-2020-tickets-85069363757) or participate to the CFP (https://www.papercall.io/dcd20)#2019-12-0515:48chadhsI took the plunge and launched my little web app today. If you want to check it out you can here: https://www.readitnever.app Per the advices of beginners chat I also posted here: https://www.reddit.com/r/Clojure/comments/e6iyfd/launched_my_first_real_web_app_today_written_in/#2019-12-0517:55Bingen Galartza Iparragirrehttps://github.com/magnetcoop/object-storage.ftp We just released a library that provides an Integrant key for managing objects in FTP servers. Perfect for Duct environments, but it can also be used without it.#2019-12-0600:52yogthosDeveloper Economics Q4 2019 Survey could use some Clojure 🙂 https://www.developereconomics.net/?member_id=9QXmXyAv#2019-12-0609:56imredid it this morning but the only question where Clojure was on-topic was a "what lang do you use" type of thing where I had to supply it as Other, please specify. Disappointed#2019-12-0616:05Piotr RoterskiThere’s also a fairly popular https://survey.stateofjs.com/ closing soon which has Clojurescript explicitly listed as one of js flavours.#2019-12-0618:32walterlSignup required to take a survey? Hard pass.#2019-12-0602:01weiI wrote a tool to generate secret santa pairings: https://github.com/yayitswei/santa. feedback welcome!#2019-12-0612:30plexusClojureVerse is momentarily down. The last discourse upgrade didn't complete correctly so I'm doing a manual upgrade and restart. We should be back shortly, thank you for your patience.#2019-12-0612:42plexusand we're back
#2019-12-0711:08otfromhugops#2019-12-0621:21mauricio.szaboJust published a new version of Atom editor's socket REPL package Chlorine. On this version, some changes on showing documentation on vars (it is now showing the spec information). It also organize things better so it'll be easier to integrate with orchard in the future. Discussions on #chlorine channel 🙂#2019-12-0801:39seancorfieldexpectations/clojure-test {:mvn/version "1.1.2"} -- clojure.test-compatible version of Expectations -- bug fix for (expect result-map (in larger-map)), adds (expect (between 10 20) test-expression), multi-version test suite (Clojure 1.8 and later; (expect ::my-spec test-expression) requires Clojure 1.9 or later), improved documentation <https://cljdoc.org/d/expectations/clojure-test/1.1.2> -- follow-up on #expectations#2019-12-0817:05DumchJust written an article about using both Spacemacs and Intellij at the same time https://www.reddit.com/r/Clojure/comments/e7vvmy/idea_or_emacs_or_both_for_a_vim_user/#2019-12-0820:57uochanI released a small configuration management tool named "daddy"! https://github.com/liquidz/daddy Special thanks to @borkdude for developing sci !#2019-12-0909:51seancorfieldexpectations/clojure-test {:mvn/version "1.2.1"} -- clojure.test-compatible version of Expectations -- all new documentation https://cljdoc.org/d/expectations/clojure-test/1.2.1/doc/readme -- several enhancements https://cljdoc.org/d/expectations/clojure-test/1.2.1/doc/changes -- follow-up on #expectations (expect a lot more activity on this library going forward!)#2019-12-0913:50athosI’ve just published Postmortem, a tiny value-oriented debugging tool for Clojure(Script)! https://github.com/athos/postmortem • Postmortem is heavily inspired by scope-capture and miracle.save, but focuses more on “postmortem debugging” as its name suggests. • Integration with transducers enables various flexible logging strategies • Instrumentation on vars makes it easier to debug functions without touching their code • Supports Clojure/ClojureScript/self-hosted ClojureScript If you’re interested, give it a shot! Any feedback is welcome.#2019-12-0914:04vemvInteresting! Perhaps a Rationale section would help, explaining how it compares to alternatives (I see that hinted in Features, but still... ^^)#2019-12-0914:22Filipe SilvaI was looking for something of this sort, although now I know scope-capture also existed#2019-12-0914:22Filipe Silvapostmortem seems more full featured though#2019-12-0914:23Filipe Silvaand also seems to have a bit more focus on working with cljs#2019-12-0914:25Filipe Silvathe instrumentation bit also looks right like what I really wanted#2019-12-0914:34athos@U45T93RA6 Hi, thanks! Yeah, I admit the current document is still hard to grasp what the library does really aim at, so I’ll try to improve it sometime soon. @UJVKWJTGE Thank you for the feedback! I hope it’ll be useful for your use case.#2019-12-1301:15val_waeselynck@U0508956F Hello, scope-capture's author here (thanks for mentioning it, I'm glad it gave you some inspiration!) I don't see much overlap between both libraries. scope-capture is above all about recreating the context of your code and projecting your REPL into it, and really not much about dealing with saved values. As such, Postmortem seems more akin to tracing debuggers, like tools.trace or Sayid (which is also very feature complete!). @UJVKWJTGE: FYI scope-capture does work with ClojureScript.#2019-12-1301:21val_waeselynckMight want to add Postmortem to the Clojure Toolbox! https://www.clojure-toolbox.com/#2019-12-1301:24val_waeselynckAlso, I think not everyone knows about this, but there's a section about debugging in the REPL guide on http://clojure.org, it might be useful as an overview of the available options: https://clojure.org/guides/repl/enhancing_your_repl_workflow#debugging-tools-and-techniques#2019-12-1307:20athos@U06GS6P1N Hi, thanks for your suggestions! Yes, I know the Clojure Toolbox, but I thought for no reason that it’s not actively maintained anymore. I will file a PR for Postmortem later 😉#2019-12-1307:22athos> I don’t see much overlap between both libraries. scope-capture is above all about recreating the context of your code and projecting your REPL into it, and really not much about dealing with saved values. Once you save a local context as data, you can freely use that data later. Evaluating an expression in a reproduced context is one of the use cases for the saved data. Although Postmortem does not provide dedicated APIs for that, it could be done with relatively small effort using the existing APIs for most simple cases. For example, the last expression in the following code effectively works like scope-capture’s letsc:
(require '[postmortem.core :as pm])

(defn sum [n]
  (loop [n n sum 0]
    (pm/dump :sum)
    (if (= n 0)
      sum
      (recur (dec n) (+ sum n)))))

(sum 10) ;=> 55

;; This evaluates (+ sum n) with the local context of the 7th iteration
(let [{:keys [sum n]} (-> (pm/log-for :sum) (nth 7))]
  (+ sum n))
#2019-12-1311:40Filipe Silvadidn't know about that section, but unfortunately tools.trace doesn't seem to support cljs and that's one of the most useful ones I feel 😞#2019-12-1311:43Filipe Silvain fact, in clojure-toolsbox I see that scope-capture is the only debugging tool marked as cljs even#2019-12-1315:14val_waeselynck@U0508956F some would argue that for the most simple cases, you don't need a lib at all, you can just use the inline-def trick#2019-12-1315:15val_waeselynckhttps://clojurians.slack.com/archives/C06MAR553/p1576237425427800?thread_ts=1575899422.378000&amp;cid=C06MAR553 That's far from the truth though, with dirac and all#2019-12-1315:32Filipe SilvaI meant the "Debugging" section though#2019-12-1315:33Filipe Silvadirac is listed in "ClojureScript Development" it seems#2019-12-0914:35yogthosClojure/north call for papers is open 🎉 https://www.papercall.io/clojure-north-2020#2019-12-0917:30chrisnNew release of libpython-clj (1.20)! Thanks to help by jjtolton, joinr, and gilch and a few others we have two large new pieces that move us measurably closer to having a great Python development/production environment in Clojure. The changelog has the details but we now support require-python that works just like require. It does an initialize call if one isn't done already, loads the module into a namespace, and then does the 'require' of that namespace into your current one. It supports 'reload' for when you are developing a new python module to make it smoother to develop new functionality in Python. We also support creating python classes in clojure. So you can create a new python class purely in clojure that will call into your clojure functions including the 'self' argument. This allows us to interact with toolkits that require extension-by-derivation and is also just kind of fun to use. It's up on Clojars now, Enjoy!! <https://github.com/cnuernber/libpython-clj/blob/master/CHANGELOG.md>#2019-12-0920:52dotemacsState of JavaScript survey is out (For the past 3 years, ClojureScript users who answered the survey made up 1% of the respondents. Maybe this year we can top that hint, hint 😉) https://survey.stateofjs.com/#2019-12-1010:44victorbHello folks! Not sure if this is OK here as I see mostly open source project, but thought I'd give it a go. Basically, for the last 6 months we've been working on a platform called Bravo that turns designs into native iOS and Android apps without coding anything. Now, the frontend is entirely made in ClojureScript by one person, and ClojureScript was a pleasure to use. Looking forward to sharing lessons and experience around it in the future, once the launch-crazyness has calmed down. If you want to check it out, the project landing page is <https://bravostudio.app> and the web app itself can be found at <https://projects.bravostudio.app>#2019-12-1015:04Luke Schubertjust as an fyi something bugged on chrome for me and that background box was covering up things as you scrolled#2019-12-1015:05victorbThanks a lot for the report! Could you possibly send a screenshot? Not entirely sure what would be happening#2019-12-1015:06Luke SchubertI attached a screenshot, is it not showing up in the message?#2019-12-1015:06victorbsorry, was collapsed by default, I can see it now. Thanks!#2019-12-1015:06Luke Schubertnot a problem#2019-12-1020:18bozhidarThe “State of CIDER 2019” survey results are out https://metaredux.com/posts/2019/12/10/state-of-cider-2019-results.html#2019-12-1102:05paluan batistahttps://blog.ambrosebs.com/2016/08/07/automatic-annotations.html#2019-12-1107:33vlaaad#cljfx css 1.1.0 released, adding support for Java 8, thus making all cljfx libs Java 8-compatible. https://github.com/cljfx/css Go wild with desktop apps in Clojure!#2019-12-1109:00CameronOh, I didn't know you were the one who did cljfx. I absolutely love it, when I first was messing with seesaw, seesaw was not the sort of thing I wanted (although that's not a dig on seesaw) ; I wanted something exactly like this, something declarative, where you're dealing with and manipulating raw data that acts as an interface for your eventual living breathing GUI, and will eventually of course be interpreted, in this case rendered.#2019-12-1110:00vlaaadThanks!#2019-12-1113:01tony.kayI just released Fulcro 3.0.13 and Fulcro Websockets 3.0.5. These are bugfix releases that solve some issues that popped up in the 3.x versions with transaction processing of graph merges. https://github.com/fulcrologic/fulcro#2019-12-1115:01bozhidarThe State of CIDER survey results are out https://metaredux.com/posts/2019/12/10/state-of-cider-2019-results.html#2019-12-1210:55jerger_at_ddaWe initial-released https://github.com/DomainDrivenArchitecture/dda-k8s-crate for provisioning of Single-Node K8s Instances. We use this setup to deploy cheap & low traffic applications in a K8s way. Feedback & Stars are welcome :-)#2019-12-1217:56carocadparcera has now reached v0.10.0 . Special thanks to @dominicm for so much feedback of Clojure syntax used on the wild which I didnt initially consider. https://github.com/carocad/parcera#2019-12-1221:48chrisnlibpython-clj has a new release 1.23. • Conda support. We should now work automatically if you have activated your conda environment. Conda is IMO the best (read: works with binary dependencies in the best way) package manager for Python. • Python objects now implement hashCode and .equals and use python semantics for these. • Bugfixes around passing infinite sequences to python. Python generators make lazy sequences in clojure and clojure sequences are python iterables and work correctly with itertools. https://github.com/cnuernber/libpython-clj#2019-12-1222:20didibusJust watched your talk about it. I really think this is an awesome project. Being able to use Python libraries as if they were Clojures, that's awesome#2019-12-1222:20didibusIts almost like having a ClojurePython dialect 😝#2019-12-1222:39chrisnThanks! We really are moving fast that direction. Things are quite a bit further along that pathway now that we have require-python and conda support.#2019-12-1320:31souenzzoDreaming about language-interop, clojure could allow extensiosn in the ns-loading process
(ns 
  (:extensions [libpython-clj.python/ns-init])
  (:python-modules ["numpy" :as np])
  (:require [,,,]))
#2019-12-1322:49chrisn@U2J4FRT2T - Please join us at https://clojurians.zulipchat.com/#narrow/stream/215609-libpython-clj-dev - that is a good idea. Actually, along those lines we would also like to extend compliment so that people using compliment-based intellisense systems (emacs company-mode and vim) would get intellisense for python objects.#2019-12-1322:48oliyMartian, the HTTP abstraction library, 0.1.11
This release adds support for:

- Free form objects (additionalProperties) #70 (thanks @omartell)
- Recursive schemas #71
- re-frame on-success and on-failure handlers can be vectors, allowing closing over of local bindings #67
https://github.com/oliyh/martian
#2019-12-1400:18tony.kayFulcro 3.0.15 is on Clojars. There were additional subtle issues in the graph merge logic that should now be fixed.#2019-12-1421:29borkdudeClj-kondo v2019.12.14 Unresolved namespace linter and 13 other enhancements/fixes! This might be the last release for 2019. Thanks for using it, the great feedback and contributions. Happy linting! https://github.com/borkdude/clj-kondo/releases/tag/v2019.12.14 Follow up in #clj-kondo#2019-12-1423:22uochanDad ver 0.1.2 is out! Tiny feature additions and some bugfixes are contained. Small configuration management tool for Clojure https://github.com/liquidz/dad#2019-12-1613:59miroHi guys! Just tried to summarize some of my thoughts on clustering and Kubernetes in my latest blog post: https://www.titanoboa.io/cluster.html Though it relates to clojure only remotely, still I talk there about how titanoboa's stateless cluster works so it still might be of interest. Feedback welcome!#2019-12-1614:07dominicmThis is really interesting, I liked the history.#2019-12-1614:20vemvSounds promising :) OTOH isn't Embedded Clustering sort of an oxymoron? It seems to me that you can't do distributed programming (i.e. a HA setup) an a self-contained manner.#2019-12-1614:31miro@U45T93RA6 yeah you are right, I mean by it basically "clustering capabilities embedded in the application" - as opposed to using an external clustering framework... I used "embedded" just to reference embedded http servers.#2019-12-1614:49dominicmThe link to hacker news is broken.#2019-12-1615:40miro@U09LZR36F thanks will fix it#2019-12-2010:42jeroenvandijk
It seems to me that you can't do distributed programming (i.e. a HA setup) an a self-contained manner.
` @U45T93RA6 why not? What if you were to abstract the http layer?
#2019-12-2010:46vemvHA is about e.g. restoring machines if they go down. Generally this implies a supervisor, or "master" thing (like a load balancer); a given server instance cannot manage the case where that instance itself goes down#2019-12-2010:51jeroenvandijkah I agree that it will not be more than a simulation, but it could be a very good one? Good enough to not have to think about it (too much)? I'm assuming here you can rely on a stable context (e.g. AWS ELB's and autoscaling for instance)#2019-12-2010:51jeroenvandijkOr am I talking about something else now?#2019-12-2011:31dominicmSomething we don't have in our software, that we expect of software in front of us, is stability.#2019-12-2011:31dominicmWe expect our programs to fail.#2019-12-2011:35jeroenvandijkWhat if you could simulate that like the chaos monkey, but than embedded. I agree stability cannot be expected, I do think you can make particular choices to have very stable software#2019-12-2012:44dominicmSure. My point was thinking about downtime and reaction latency.#2019-12-1616:17Daniel SlutskyLudovic Courtès of the GuixHpc project kindly agreed to talk about Guix-Jupyter reproducible notebooks in an online meeting with the Clojure community. Please mark your preferred times: https://twitter.com/scicloj/status/1206503012304347137#2019-12-1617:03blueberryNew release 0.5.0 sheepysheepysheepysheepysheepy https://aiprobook.com/numerical-linear-algebra-for-programmers?release=0.5.0&amp;src=cslack#2019-12-1622:46athomasoriginalJust published a companion Youtube channel to Between Two Parens and started it off with a beginner series for how I setup Atom for Clojure development https://www.youtube.com/playlist?list=PLaGDS2KB3-AqeOryQptgApJ6M7mfoFXIp#2019-12-1709:43jaihindhreddyCan't see any videos.#2019-12-1715:47athomasoriginalhmmm…that’s odd. What do you see? Maybe it’s just the link I provided :thinking_face:#2019-12-1811:29jaihindhreddyCan see now.#2019-12-1915:31sogaiuthe multiple short videos format is appreciated :thumbsup: particularly liked the spelling out of why certain things were being demonstrated. also, the references to some other resources (e.g. one of ericnormand's pages), but also that not everything at a certain page was necessary (e.g. skipping lein install).#2019-12-1918:12sogaiualso, in the 3rd video (the chlorine one), it's nice that you show how to get a socket repl via -J-D... -- i think i didn't hear any mention that there is something one can do to not have to enter this at the command line repeatedly (e.g. deps.edn and/or project.clj modification). may be that might get covered in another video? 🙂#2019-12-1918:43sogaiui noticed there didn't seem to be much coverage of keybindings (there was a bit in bringing up the command palette, true). one of the things i found unfortunate about atom is the plethora of keybinding conflicts. i think this is worth knowing early and also some things one can do to cope. also i think it's worth pointing out that it's not difficult to set up custom keybindings and that's likely something that will be a part of one's atom-using life.#2019-12-1920:49athomasoriginalhey @UG1C3AD5Z! Your comments are much appreciated 🙂 I am actually going to add a video for the key bindings because I agree that those require a little more to configure and I also think one on the short cuts for CLJis a wonderful idea. Thank you again for taking the time to let me know what worked and what I can do better!! In the meantime, if you are looking for how I setup keybindings/my global clojure config take a look at these: • clojure config https://github.com/tkjone/dotfiles/blob/master/.clojure/deps.edn • chlorine hotkeys https://github.com/tkjone/dotfiles/blob/master/atom/keymap.cson#2019-12-1921:28sogaiugood to hear you have plans for a video with keybindings 🙂 i looked at you deps.edn file -- in my case, since i tend to switch among multiple projects, i have several aliases for socket repls (e.g. :sock, :sock2, :sock3). i'd like to only have one and get it to choose a random or unused port, but haven't worked on that yet. as for hotkeys, i see you went for single letters -- possibly removing the initial C-; from the default suggestions on chlorine's page i guess (and some other changes it looks like). i have too much muscle memory for single letters already and think they are likely to conflict with other things too easily, so i have the non-vi defaults. whatever works well for each 🙂 fwiw, i use https://atom.io/packages/keymap-control to cope with diagnosing keybinding issues. good luck with the next(?) video. may be there's some way to get some of the keys you type to show up on the screen. (i was curious as to exactly what you were typing when doing parinfer.)#2019-12-2112:59mauricio.szaboAlso, I would like to point that Chlorine supports shadow-cljs (and it will support figwheel too in the future), so if there are people interested in ClojureScript development they probably should go to shadow instead of Lumo#2019-12-2112:59mauricio.szabo(to be honest, Lumo support is only because it works without any modifications to the code 😄)#2019-12-1623:07LuAqua's release 0.2.1 sheepy • offset value coming both in pixels and percent (0 to 1) • jumpy and fast scrolling handling to avoid glitches and lag out of the box https://github.com/luciodale/aqua#2019-12-1709:29pezThis looks super nice! I almost get the urge to add some scroll animations just because. 😃#2019-12-1709:59LuAhahah yeah right? 😄 thanks!#2019-12-1714:06Daniel SlutskyHere is the Guix-Jupyter meeting announcement: https://twitter.com/scicloj/status/1206935971507380224#2019-12-1715:05sakalliThe registration for The International Clojure Data Science Meetup in Berlin on 27th of February, a few days before ClojureD, is now open. It is a meetup about improving the Clojure Data Science story. Clojure is a fantastic language for data, yet the data science ecosystem still needs some love. A bunch of us are busy with it. Join us if you have a dual crush on Clojure and data, or if you are just curious! Please register at https://ti.to/scicloj/international-clojure-data-science-meetup-in-berlin#2019-12-1915:45LuFork v1.0.0 out 🙂. Form lib for reagent and re-frame users 🍴 https://github.com/luciodale/fork#2019-12-2019:14Alex Miller (Clojure team)tools.deps.graph 0.2.24 is now available, adding the --size flag to include jar sizes (if desired) in your deps.edn dependency graphs. Enjoy!#2019-12-2019:14Alex Miller (Clojure team)If you have a deps.edn project and graphviz installed, you can probably try the new --size flag with: clj -Sdeps '{:aliases {:g {:deps {org.clojure/tools.deps.graph {:mvn/version "0.2.24"}} :main-opts ["-m" "clojure.tools.deps.graph" "--size"]}}}' -A:g#2019-12-2021:03dominicmI don't suppose there's any indication of size in the size of nodes?#2019-12-2021:19Alex Miller (Clojure team)Not currently, some of that stuff is kind of finicky, but might try something like that#2019-12-2021:21dominicmYeah. Dot isn't great for that kind of layout.#2019-12-2020:54seancorfieldorg.clojure/java.data {:mvn/version "0.1.5"} https://github.com/clojure/java.data now supports constructor arguments via metadata and the ability to set properties on existing objects -- follow-up to #clojure or via DM#2019-12-2022:58uochanI just released dad a small configuration management tool ver 0.2.1! https://github.com/liquidz/dad Added REPL support and fixed some bugs. Demo screencast is available here. https://twitter.com/uochan/status/1208158269832695808#2019-12-2118:55sogaiui think it was a good idea to make the little video :thumbsup: (i found the current description "configuration management tool" to be vague.)#2019-12-2208:54hindolWrote my very first library in Clojure. It is a JSON-RPC 2.0 client. You are welcome to try it out and report issues. https://github.com/Hindol/json-rpc#2019-12-2300:28sparkofreasonhashtag is inspired by and derived from the very cool hashp project from @weavejester. Use for defining your own "debugger reader tags". Pre-alpha, feedback welcome and appreciated. https://github.com/sparkofreason/hashtag#2019-12-2301:46Vincent CantinMy feedback: remove “sh**ty” from the description. It does not provide any information to the person reading it, and will be understood differently by persons of different culture and background.#2019-12-2302:08sparkofreasonDone.#2019-12-2303:05Vincent CantinI am developing a library which uses a lot of .cljc files, I want to give hashtag a try, but I would need it to work on both clj and cljs for that.#2019-12-2303:44Vincent CantinAnother feedback: I suggest to add the “issue” section in Github for your project.#2019-12-2315:16sparkofreasonhttps://github.com/sparkofreason/hashtag/issues/1#2019-12-2409:43borkdudeBabashka, a native Clojure scripting tool, v0.0.49 adds clojure.main/repl: https://github.com/borkdude/babashka/releases/tag/v0.0.49. Follow up in #babashka.#2019-12-2411:42littleli🆒 Do you plan at some point to make also windows binaries like you do with clj-kondo?#2019-12-2411:51littleliOh, I see the issue. Interesting.#2019-12-2414:03blueberryNew release 0.14.0 - Santa's Edition sheepy https://aiprobook.com/deep-learning-for-programmers?source=cslack&release=0.14.0#2019-12-2513:51borkdudePossibly the worst day to announce some thing, but from under the Christmas tree, I made this: https://github.com/borkdude/deps.clj Merry MXmas all!#2019-12-2516:44plexuskaocha-cljs 0.0-68 is out, which addresses a stability issue when testing against a browser environment. Kaocha-cljs provides cljs.test support to Kaocha, a functional and extensible test runner.#2019-12-2815:44mogenslundHi everyone I am working on a rewrite of Liquid, Liquid 2.0, based on feedback from Liquid 1.0. Since it contains a lot of experiments and rewrites I have kept the code in its own temporary repository: https://github.com/mogenslund/liq2 It is still experimental, but stable enough to try. I have attempted to get it even closer to the vim experience. Feel free to give it a try (Windows users might run into problems, though).#2020-12-2901:19LuInst, a multi language cljs tool to parse instants into "Time Interval Ago" or "In Time Interval" i.e. "5 minutes ago" "in 2 minutes" https://github.com/luciodale/inst#2020-12-2914:10valtteriCool! For simple cases there are also some hidden gems in the Google Closure library https://google.github.io/closure-library/api/goog.date.relative.html
cljs.user> (require '[goog.date.relative :as gdate])
nil
cljs.user> (gdate/format (.parse js/Date "2019-12-29T14:06:41.079Z"))
"3 minutes ago" 
#2020-12-2914:19LuThanks for pointing it out! 🙂#2020-12-3111:07metasoarousDoes it support the reverse mapping from friendly strings to times?#2020-12-3111:33LuNot currently, but hey! It’s a good idea 💡 will add this in the next hours :)#2020-12-3118:47LuI have been playing with it for a bit and although I implemented a safe way to go back to the Inst, it’s just an approximation of the original value (as the exact seconds are lost during the conversion to string when they go above the hour unit). For this reason, I don’t think it’s a useful feature to add, as the reverse algorithm produces an output that doesn’t exactly match with the initial Inst #2020-12-2916:38borkdudespartan.test: a spartan testing library compatible with babashka https://github.com/borkdude/spartan.test tl;dr: testing for scripts written with babashka can also be used with clojure itself, if needed#2020-12-3006:06JAtkinshttps://github.com/JJ-Atkinson/Draftable#2020-12-3006:08JAtkinsI'm starting to put some time into this. I would love ideas for the project! At the moment I don't think coding help would be useful, since everything is so unstable. Once I have a usable core I'll make a call for help. The readme explains why and what I want make this.#2020-12-3022:54borkdudeMade a thing to cut out the unused vars from a project: https://github.com/borkdude/carve Typical usage:
clj -A:carve --opts '{:paths ["src" "test"]}'
#2020-12-3100:25Alex Miller (Clojure team)I remember one day, many months ago, when you didn’t release something :)#2020-12-3102:03LuWas it a very sad day? 😄#2020-12-3109:34MattiasSo, intriguing but I have to ask - when does the need typically come up? (I’d imagine all sorts of IDEs, lingers and build pipelines would also catch stuff like this?). Thanks 😊#2020-12-3110:30borkdude@UCW3QKWKT I'm not using such an IDE myself, but having this as an IDE-independent tool gives more options and having options is nice#2020-12-3110:41MattiasMakes sense, thanks! It’s how I like it as well 😀#2020-12-3112:04borkdude@U064X3EF3 I'm pretty sure the last day of 2019 will be a new-release-free day 🙂#2020-12-3112:10genmeblogClojure2d 1.3.0-alpha2 - revised version, with big changes to clojure2d.color namespace. https://clojure2d.github.io/clojure2d/#2020-12-3112:14genmeblogAlso new version of Fastmath is ready to be used 1.5.0-alpha4. What's new is fastmath.optimization namespace, Revised stats, vector operations, new interpolation functions added, signal (audio) processing. Enjoy. https://github.com/generateme/fastmath#2020-12-3115:41athomasoriginalMorning All! Just finished the last blog post of the year https://betweentwoparens.com/reagent-and-hiccup - As always, I welcome comments and any suggestions for improvements to make this as useful as possible. Have an amazing New Year’s Eve!#2020-12-3116:51henrik [tag children] is also valid hiccup.#2020-12-3117:16Jakub Holý (HolyJak)The first example, would it not be better if the two were same, ie not just h1 in one and div with a class=.. in the other?#2020-12-3118:03athomasoriginalGood points! Updated 🎉#2020-12-3118:08henrik“To be considered valid Reagent Hiccup, the vector you pass to Reagent needs to take one of the following three shapes” Just remove “three”#2020-12-3120:07seancorfieldJust a gentle reminder: #announcements is for projects & libraries per the channel topic -- we have #news-and-articles for blog posts etc.#2020-01-0104:57seancorfieldWhile this might look like a blog post, it's actually a New Year's Eve round-up of the main Clojure projects I maintain and their updates since August: https://corfield.org/blog/2019/12/31/releases/ -- expectations, honeysql, core.cache, core.memoize, java.data, java.jdbc, clj-new, depstar, next.jdbc, dot-clojure -- consider this a six-month summary of their releases. Follow-ups to #expectations #honeysql #clojure #sql #tools-deps as appropriate, or via DM.#2020-01-0301:40practicalli-johnhttps://clojars.org/seancorfield/clj-new only shows clj-new 0.8.3 and 0.8.4 fails on the command line when tried just now. Is this just slowness for clojars to update? 0.8.3 seems to be working just fine though :)#2020-01-0302:21seancorfieldOops! I got distracted by work and forgot the most important step: deploy clj-new#2020-01-0302:22seancorfieldThanks for the heads up. 0.8.4 is on Clojars now.#2020-01-0319:59practicalli-johnSeems like that's the maintainers equivalent of forgetting the attachment on an email 🙂 Thanks Sean, great work.#2020-01-0705:57Jakub Holý (HolyJak)FYI, regarding Clj-new and --query it surprised it it isn't called --dry-run as is common but I guess there are good reasons...#2020-01-0706:15seancorfield@U0522TWDA Well, it doesn't dry run the actual dependency fetching, and it provides more information about the template substitutions and what file/folder names would be created, with namespaces etc. So I felt -? / --query was more appropriate.#2020-01-0706:16Jakub Holý (HolyJak)Thank you#2020-01-0706:17seancorfield(there's already a verbose option to display information about the dependency fetching -- at some point I may try to integrate a full "dry-run" approach)#2020-01-0110:27LuNew year new version V1.1.0 🎆 Now fork has a convenient handler to perform real time server side validation, before a form is submitted. Check it out in the README https://github.com/luciodale/fork#2020-01-0218:12Alex Miller (Clojure team)I just created #clojure-survey as I'm starting to prep the State of Clojure 2020 survey. If you want to help me bike shed various answer sets, would be happy for feedback there. This is a lib-related announcement as I want to make sure I include the right set of options for a few questions. Please take all feedback on this to #clojure-survey#2020-01-0318:25rafdFor Clojurians in Toronto, we're starting a regular monthly Beginners Clojure Workshop. Bring your laptop and work on exercises with a few experienced Clojurians around. This month's workshop is on January 15 @ DevHub. RSVP on Meetup: https://www.meetup.com/Clojure-Toronto/events/267304205/#2020-01-0318:56seancorfieldThis belongs in #events -- not in the main #announcements channel.#2020-01-0400:25andy.fingerhutNot exactly a new thing, but the Clojure cheat sheet with tooltips containing summaries of content on http://ClojureDocs.org has been updated from summaries from 2014, to summaries from 2020! I was not aware of a data export of http://ClojureDocs.org content after 2014 until recently: https://jafingerhut.github.io#2020-01-0406:47nateHey everyone, our latest episode is a review on our favorite topics from 2019: https://clojuredesign.club/episode/062-2019-in-review/ It's a good overview of the topics that we've talked about, so it's a good place to start if you're curious about the podcast. Follow up in #clojuredesign-podcast clj 🎙️#2020-01-0411:00henrikThis should probably go in #news-and-articles rather than #announcements #2020-01-0413:03djanusI've written a word game in re-frame. Actually it's been around for a while, but I have now translated it to English. Code: https://github.com/nathell/wordchampions, play: http://danieljanus.pl/wladcyslow/, backstory: http://blog.danieljanus.pl/2020/01/03/word-champions/#2020-01-0413:04djanus(not sure if this belongs in this channel – please let me know if not)#2020-01-0413:35p-himikWhere do you get the words from? Just stumbled upon "tions" - that doesn't seem to be correct. Also "Perth" - are proper names supposed to be allowed?#2020-01-0413:37djanusThe wordlist is this one: https://github.com/first20hours/google-10000-english. It does contain proper names and "tions", not sure why#2020-01-0413:37p-himikJust found "MSGID". :D#2020-01-0413:40p-himik"tions" is probably there because of the line folding.#2020-01-0413:44p-himikJust as an idea - maybe it's worth it to check out other corpora, e.g. from https://www.corpusdata.org/. At least there they're divided by their origin so you might be able to find the most sensible set of words without too much trouble.#2020-01-0413:45p-himikIf you want to continue developing this game, here's another idea - add a difficulty level or a flag that allows a user to limit the words only to regular nouns.#2020-01-0413:45p-himikBut overall, a great word game, I love it. :)#2020-01-0414:12djanusThanks for the feedback! And yes, I'm definitely in for better wordlists 🙂#2020-01-0511:56Daniel SlutskyThis Thursday, Jan 9th 2020, 3-5pm UTC, we meet Ludovic Courtès, who will tell about Guix-Jupyter reproducible notebooks. Registration: https://twitter.com/scicloj/status/1213789408983470080#2020-01-0520:44seancorfieldThis belongs in #events -- where you also posted it -- so I'm deleting it from #announcements#2020-01-0603:04wilkerlucioHello, I'm happy to announce a new support library for core.async, this library attacks the following problems: 1. use of promise-channels in general 2. core.async error propagation 3. JS promises integration with core.async 4. testing core.async user code with cljs.test You can find the library at: https://github.com/wilkerlucio/wsscode-async I open a clojureverse thread to discussions around it: https://clojureverse.org/t/clojurescript-core-async-and-promises-with-sanity/5326 I hope you enjoy, and happy new year!#2020-01-0611:57mikethompson> lein-git-inject Leiningen middleware which computes the "version" at build-time - from the ambient git context (think tags). Also allows this "computed version" to be automatically embedded in your ClojureScript application for use at runtime (think logging, display, etc) https://github.com/day8/lein-git-inject#2020-01-0714:40victorbThis is great, been doing it "manually" by having a macro that loads the git repository on compile time. Great to have something reusable 🙂 Thanks!#2020-01-0714:42victorbI guess you've already seen https://github.com/clj-jgit/clj-jgit @U051MTYAB ? Saw that you're shelling out to git cli and doing bunch of matching, with clj-jgit it would be a bit simpler#2020-01-0618:42Bryan DuxburyWe just released a library that extends Nippy serialization to Clojure fns: https://tech.redplanetlabs.com/2020/01/06/serializing-and-deserializing-clojure-fns-with-nippy/#2020-01-0618:45vemvInteresting one! I gave it a quick read. Note the existing channel desc: > Avoid cross posting in #news-and-articles#2020-01-0618:45Bryan Duxburywhoops my bad... first time announcer#2020-01-0618:48vemvas of lately we're trying to tighten the focus of the channel, unless something is an announcement of practically global interest. For setting good example you might want to delete the #announcements version and leave the other as-is. Thanks!#2020-01-0618:48Bryan Duxburyi just did the opposite. keep that in mind for the next time around#2020-01-0618:49vemvFair enough. Desc wasn't exactly clear tbh#2020-01-0619:22seancorfield@U45T93RA6 Since this is a library announcement, I think it's fine here (I'm one of the Admins here @UM8DMC9FT)#2020-01-0619:22Bryan Duxburycool, appreciate the guidance. hopefully not the last package i get to announce.#2020-01-0619:24vemvWhoops. This was posted to #news-and-articles first so I was biased to read it mostly as an article#2020-01-0619:25seancorfieldAgreed that it shouldn't have been cross-posted there too. Remember that we're trying to maintain a "light touch" here rather than trying to become the "Channel Police" 🙂#2020-01-0619:49greglookhttps://github.com/greglook/cljstyle 0.10.1 is available now for all your code-formatting needs! cljstyle is a binary tool for checking and fixing formatting errors in your Clojure code. This minor version includes a new pipe command for easy editor integration.#2020-01-0622:51mauricio.szaboJust published a new version of the Socket REPL package for Atom Chlorine - version 0.3.9. On this version, support for Clojerl REPLs, and a simple fix on Autocomplete for "earmuffs" vars 🙂. Discussions on #chlorine channel#2020-01-0715:59Alex Miller (Clojure team)Hello everyone! It's time for the annual State of Clojure survey for anyone using Clojure, ClojureScript, ClojureCLR! https://www.surveymonkey.com/r/clojure2020 - takes <10 min and is a huge source of useful info to the community. All results are released after the survey is complete.#2020-01-0715:59Alex Miller (Clojure team)If you have feedback or questions, you can take it to #clojure-survey#2020-01-0718:37chrisnRelease 1.30 of libpython-clj is out. We have: * Support for python classes in require-python. They can be required like modules although you have to understand that in that case you are essentially calling the class methods explicitly (meaning overridden methods don't work). This is what you would expect in Python also. * Deeper integration of numpy into the datatype math system meaning you can have a numpy object and type (+ numpy-ary 5) and get back a new numpy array. This uses the numpy functions under the cover. * A demonstration of a cutting edge facial rec engine (https://github.com/cnuernber/facial-rec) that uses docker, conda, python, and clojure all playing in the same box. * Lots of bugfixes. https://github.com/cnuernber/libpython-clj#2020-01-0718:41eggsyntaxmetasoarous [1:40 PM]: @UDRJMEFSN Awesome! Nice work! (copied from main channel)#2020-01-0805:32wilkerlucioHello everybody, just release a new library called edn-json (https://github.com/wilkerlucio/edn-json). This library provides a way to encode EDN data to JSON, similar to clj->js, but does it in a way that allows restauration of the EDN types on the conversion back (keywords, symbols, uuids, etc...). The intended application is to be able to store data from EDN in JSON document stores (like MongoDB, IndexedDB...) in a way that keeps them efficient (leveraging the structure) while enable the data to be converted back to it's original form. More details on the README.#2020-01-0814:46mafcocincoIs this similar to transit?#2020-01-0815:07isakFor transit, they specifically caution against storing the results, while this one encourages it @U6SN41SJC#2020-01-0815:08mafcocincoAh, makes sense. So they are complimentary? Or would you say edn-json is a super set of the functionality that transit provides?#2020-01-0815:12isakYea, complementary, I think. It sounds like it would still make sense to use transit for transport, and this for anything durable (or if you need other JS-like tools to be able to interact with it easily)#2020-01-0815:45shaun-mahoodI believe that transit no longer discourages you from using it to store results - they updated the readme after having no breaking changes for a few years.#2020-01-0816:06isakAh you're right: https://github.com/cognitect/transit-js/commit/f49c7bae88bfbb4b0c36966d8a987341e44a3359#2020-01-0816:44favilaI think the distinction is, transit uses json as a storage/transmission medium, but edn-json actually translates to json#2020-01-0816:45favilathe json transit produces is good for ensuring faithful round-trips in and out of edn types, but it’s not good for consuming as json#2020-01-0816:45favilaedn-json gives up some round-tripability to get something that a native json environment could consume comfortably#2020-01-0920:50fmjreyhttps://github.com/wilkerlucio/edn-json/pull/1#2020-01-0921:48pithylessFYI - a typo in the README:
(= (edn->json #uuid "") "__edn-value|#uuid foo/symb")
#2020-01-1012:53wilkerluciothanks, fixed#2020-01-0816:24petr.mensikHello guys, I just released a new library for working with Microsoft Exchange. It's built on top of ews-java-api so it simplifies communication with Exchange a lot. Any suggestions or PRs are very welcomed 🙂 https://github.com/pmensik/exchange-api#2020-01-0816:43eval2020New release for deps-try - Quickly try out dependencies on rebel-readline. https://gitlab.com/eval/deps-try/tree/master#deps-try Updates: - rebel-readline now pprints return values (thanks to @dominicm) - invoke without dep Get Started
$ clojure -A:try clj-time
...
user=> (require '[clj-time.core :as t])
user=> (t/now)
;; add additional dependencies
user=> :repl/try tick
#2020-01-0816:48p-himikHow is deps-try better than using -Sdeps? It's a bit less verbose (assuming deps-try is added in the user's clj config), but is there something I'm missing?#2020-01-0817:47eval2020It's indeed similar to (but way easier than) clojure -A:rebel -Sdeps '{:deps {foo {:mvn/version "RELEASE"} some-other {:mvn/version "RELEASE"}}}'. Additionally deps-try allows to add dependencies once the repl is running via :repl/try other-dep.#2020-01-0817:57p-himikAh, I can see that you use clojure.tools.deps.alpha.repl/add-lib - that's what I do myself. :) Nice!#2020-01-0907:10danielcompton💸 Clojurists Together is going to be funding four project $9,000 each over 3 months. 💸 See what kinds of projects our members want us to fund at https://www.clojuriststogether.org/news/q1-2020-survey-results/, and apply by January 15th at https://www.clojuriststogether.org/open-source/#2020-01-0913:42borkdudespartan.spec: an implementation of clojure.spec.alpha that can be interpreted by and used with babashka: https://github.com/borkdude/spartan.spec#2020-01-0916:52Filipe SilvaHeya, just wanted to let you know that datafire is now available as 0.1.1 at https://github.com/filipesilva/datafire. It lets you persist Datascript databases in Firebase's Firestore. Supports offline usage and multi-user synchronization. You can use Firestore Security Rules to limit access. If you're persisting Datascript and this fits your usecase let me know, and also let me know if you've been looking for something like this but with more features. Very interested in how this setup can be pushed further.#2020-01-0917:31metasoarousNice work! On startup does this have to transact in all the available data, or does it use from-datoms?#2020-01-0917:33Filipe Silvait replays all previous transactions in order#2020-01-0917:33Filipe Silvaso it keeps history#2020-01-0917:34metasoarousOK; That could get expensive as number of transactions build up. It's much more efficient if you can rehydrate from a collection of datoms. That may be challenging with firebase as a backend, but maybe there's a way to do it?#2020-01-0917:34Filipe SilvaI haven't thought very hard about it, but maybe#2020-01-0917:35Filipe Silvathat version mainly supports transaction level granularity#2020-01-0917:35Filipe Silvameaning it persists opaque transactions#2020-01-0917:35Filipe SilvaI was thinking of supporting datom granularity, thus persisting datoms (opaque or not)#2020-01-0917:35metasoarousYeah, semantically that is nice (storing transactions). Clear conceptual model.#2020-01-0917:36Filipe Silvabut ran into a roadblock where firestore is actually really slow when offline is on and loads of small docs hit it#2020-01-0917:36Filipe Silvagoing to datom granularity might also enable views and entity based security rules#2020-01-0917:38Filipe Silvabut I wanted to understand usecases better before trying to figure out the firestore slowness#2020-01-0917:38Filipe SilvaI hadn't considered conn-from-datoms very much before you asked though#2020-01-0917:39Filipe Silvabut if there's datoms available, and there's a mapping from the firebase ordering to the local ordering, I think it would help#2020-01-0917:40Filipe Silvathe mapping will always be necessary because only the server has the real order, and it's actually very hard to just get a monotonically increasing number on firestore#2020-01-0917:41Filipe Silvaso the server uses nanosecond precision timestamps... which unfortunately lose precision when coming over#2020-01-0917:42Filipe Silvathe offline model also doesn't cater very well to a transaction based CAS number either, so it's for the best#2020-01-1716:55Ian Fernandez@U6FH8QZPD#2020-01-0916:59Alex Miller (Clojure team)Have you completed the State of Clojure 2020 Survey yet? If not, take 8 minutes and complete it here: https://www.surveymonkey.com/r/clojure2020 - thanks!#2020-01-0917:03Alex Miller (Clojure team)If you've already taken it, can you post it in your local Clojure meetup or company slack room? That would really help to spread the word.#2020-01-0917:13danielneal🎉 I’m happy to announce a new major version of Compound https://github.com/riverford/compound Compound is a library to help maintain indexed data in reagent/re-frame apps. It works with maps to make debugging and inspection easy. The new version (compound2) is not backward compatible, but improves on the original in a number of ways - it’s faster, has a simpler api, and is less impactful on your bundle size. Hope you find it useful!#2020-01-1014:42rgm@U051H1KL1 I've opened a PR to add it to clojure-toolbox ... if you can think of a better category than "Databases", please lmk.#2020-01-1014:43rgmAlso, might be worth adding some github topic tags so it shows up in https://github.com/topics/re-frame#2020-01-1014:44rgm(https://github.com/weavejester/clojure-toolbox.com/pull/336 for the toolbox PR)#2020-01-1015:01danielneal@U08BW7V1V ah thanks for that 🙂 good idea with the topic tags, I didn’t even know they were a thing#2020-01-1007:12mike_ananevHi there! I created project template for clj-new, based on Badigeon. It can compile java sources, make uberjar, (optionally omit sources), create standalone bundle (JDK9+ required). Thanks to Sean Corfield and Ewen Grosjean (EwenG). https://github.com/mikeananev/sapp#2020-01-1010:39borkdudeWhat is a standalone bundle vs an uberjar?#2020-01-1011:33mike_ananevuberjar needs JDK, standalone is really standalone: just unzip and run#2020-01-1011:34borkdudeso the standalone bundles a JDK inside?#2020-01-1016:06mike_ananevyes#2020-01-1010:15borkdudeClj-kondo January-February (or however long the history goes) release thread. Follow up in #clj-kondo#2020-01-1010:15borkdudehttps://github.com/borkdude/clj-kondo/releases/tag/v2020.01.10#2020-01-1322:10borkdudeSmall "critical" update with regards to with-redefs: https://github.com/borkdude/clj-kondo/releases/tag/v2020.01.13#2020-01-1011:13carocadParcera v0.10.2 released with some edge case fixes. Thanks again to @dominicm for the valuable feedback https://github.com/carocad/parcera#2020-01-1011:14dominicmI will give this another run on my home directory corpus :)#2020-01-1017:02dominicmNo failures!!! party-corgi#2020-01-1017:07slipset#clj-commons has taken over maintenance of pomegranate (https://github.com/clj-commons/pomegranate), the sane clojure interface to Aether/Maven Resolver. Version 1.1.1 is now released to Clojars https://clojars.org/clj-commons/pomegranate#2020-01-1018:16rickmoynihanjust looked to see what’s changed and it looks like the changelog might want updating#2020-01-1018:40Alex Miller (Clojure team)core.async 0.7.559 is now available#2020-01-1018:40Alex Miller (Clojure team)A new release of core.async is now available, which includes a number of long-pending bug fixes. • ASYNC-198 (CLJ) Fix exception rewriting in go can replace return value (thanks Kevin Downey!) • ASYNC-220 (CLJ) Fix exception in go finally swallows exception of outer try (thanks Kevin Downey!) • ASYNC-229 (CLJ) Fix go finally block executed twice (thanks Kevin Downey!) • ASYNC-212 (CLJ) Fix go fails to compile expressions with literal nil as let value (thanks Nicola Mometto!) • ASYNC-145 (CLJ, CLJS) Fix mix throws error when many channels added (thanks Angus Fletcher!) • ASYNC-170 (CLJ) Fix binding in go block throws assertion error (thanks Kevin Downey!) • ASYNC-127 (CLJ, CLJS) Fix mult to work as doc'ed with all taps accepting before next (thanks Leon Grapenthin!) • ASYNC-210 (CLJ) Fix puts allowed when buffer still full from expanding transducer (thanks Brian Rubinton!) #2020-01-1415:00Rachel Westmacottand: https://clojure.atlassian.net/browse/ASYNC-178#2020-01-1020:24Alex Miller (Clojure team)Got a bad case of the Friday afternoons? Surely you have 8 minutes to take the State of Clojure 2020 survey! https://surveymonkey.com/r/clojure2020#2020-01-1020:33Alex Miller (Clojure team)not sure those are widespread enough yet to warrant a question, but happy to put in the file for next year. btw, head to #clojure-survey for discussion#2020-01-1020:43borkdudeor maybe a question about GraalVM 🙂#2020-01-1021:14Alex Miller (Clojure team)There are several questions that include Graal#2020-01-1103:05Vincent CantinI wished there was a radio box to tick “Do you work in JS and are dying to change your job to a Clojure one?”#2020-01-1122:31CandidJoker v0.14.1 has been released: https://github.com/candid82/joker/releases/tag/v0.14.1#2020-01-1213:29wilkerlucio[com.wsscode/pathom "2.2.29"] is out! a few fixed bugs:
- `pc/reader2` will return `::p/not-found` instead of an error when dependency links are missing
- `::p/env` is automatically removed from mutations that return it and have no query
Check the full changelog at: https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md Thanks!
#2020-01-1220:02borkdudeBabashka, a native Clojure scripting tool, Jan-Feb thread (or however long the history will be). Follow up in #babashka#2020-01-1220:03borkdudev0.0.62: add-classpath and more! https://github.com/borkdude/babashka/releases/tag/v0.0.62#2020-01-1609:54borkdudev0.0.63: https://github.com/borkdude/babashka/releases/tag/v0.0.63 Windows build and performance improvements.#2020-01-1710:04borkdudeThanks to the help from @unlog1c's clj-async-profiler, hot loops with babashka are now 8x faster: https://github.com/borkdude/babashka/releases/tag/v0.0.64#2020-01-2010:20borkdudehttps://github.com/borkdude/babashka/releases/tag/v0.0.66#2020-01-1315:54rutledgepaulvCut the first release of https://github.com/vodori/schema-conformer over the weekend. It’s a library that contains a more sophisticated general-purpose “matcher” for working with prismatic schemas. Useful when you want to coerce json data into richer edn data (strings->keywords, vectors->sets, iso-strings->datetime objects, etc).#2020-01-1317:21ikitommi👍 there is a list of 3rd party schema-libs in the schema repo, please PR that in do people will find this.#2020-01-1322:34rutledgepaulvWill do, thanks#2020-01-1316:41nathanmarzWe've open-sourced proxy-plus, a library providing a replacement for Clojure's "proxy" that's 10x faster and more usable https://github.com/redplanetlabs/proxy-plus#2020-01-1317:00dominicmWhat's the trade off? Or is it all better and could be put into core?#2020-01-1317:21nathanmarzThere's no trade off, it's just better.#2020-01-1317:37gklijsWell, it has a dependency on https://asm.ow2.io/ but since the impressive list of uses that should not be an issue. Maybee there are other pieces of clojure where asm could speed things up?#2020-01-1317:39gklijsAny reason version 4.2 is used and not a more recent version?#2020-01-1317:46nathanmarzNo reason, we just haven't updated the version we use internally in a long time.#2020-01-1317:52dharriganThat's a very old version of asm- I mean 6 years ago.#2020-01-1503:21didibusCouldn't it use the included ASM with Clojure and lose the dependency?#2020-01-1503:21didibushttps://github.com/clojure/clojure/tree/master/src/jvm/clojure/asm#2020-01-1319:08Alex Miller (Clojure team)Haven't filled out the State of Clojure 2020 Survey yet? Now's a good time: https://surveymonkey.com/r/clojure2020#2020-01-1319:28tony.kayI just released Fulcro 3.1.4 and Fulcro Inspect 2.2.1 Electron. This new version of inspect allows you to select the port on which the tool listens, and properly manages multiple client inspect sessions at once (i.e. two React native apps and multiple web apps can all be inspected at the same time). The new binaries of the electron app are here: https://github.com/fulcrologic/fulcro-inspect/releases/tag/2.2.1 You must use Fulcro 3.1.4 and above with this version.#2020-01-1507:56csmI know this isn’t clojure, but I’ve been working on a JavaScript Datomic client, and have at least some of the basics working against peer-server and cloud. It’s now at the state where I think it’s okay to point it out publicly: https://github.com/csm/datomic-client-js#2020-01-1509:03steveb8nthis is great. I’ve got js lambdas calling datomic lambdas (eventually http direct) to work around the fact that there’s no js client. love your work#2020-01-1517:06Adam HelinsKafka.clj, a fairly clean and fairly well-documented client library for Kafka, is now considered battle tested with version 1.3.1. Enjoy ! https://github.com/dvlopt/kafka.clj#2020-01-1517:11gklijsNice, also support for steams and the admin client.#2020-01-1517:12Adam HelinsIndeed, as well as creating mock apps so you don't have to actually run Kafka for testing or fiddling at the repl :)#2020-01-1608:17danierouxI have been enjoying kafka.clj, thank you#2020-01-1523:10miroHello Everyone! A New release (0.8.3) of titanoboa is now available. https://github.com/mikub/titanoboa#2020-01-1615:20Alex Miller (Clojure team)Every year we do a State of Clojure survey and the 2020 one is open now, would be great if you have a few minutes to fill it out https://surveymonkey.com/r/clojure2020#2020-01-1703:29Alex Miller (Clojure team)tools.deps.alpha 0.8.264 and clj 1.10.1.496 are now available.#2020-01-1703:29Alex Miller (Clojure team)The main change in this is that support for s3 maven repos has been completely replaced and is now using a new impl of the Maven resolver transporter API based on the cognitect aws-api. The old version used the transporter-wagon adapter, the unmaintained spring s3 wagon, and the AWS Java SDK. Those deps have been happily dropped on the floor, and all other deps were bumped as well. Support for some newer AWS credential sources may be better, particularly when running on AWS. Also, you can explicitly set the s3 bucket region in your deps.edn like {:mvn/repos {"my-bucket-repo" {:url ""}}} - this is a feature of this transporter, not a general AWS thing.#2020-01-1719:30niwinzHmm, After update im getting a strange exception
Downloading: com/cognitect/transit-clj/0.8.319/transit-clj-0.8.319.pom from 
Error building classpath. org.apache.maven.repository.internal.DefaultModelResolver.<init>(org.eclipse.aether.RepositorySystemSession, org.eclipse.aether.RequestTrace, java.lang.String, org.eclipse.aether.impl.ArtifactResolver, org.eclipse.aether.impl.VersionRangeResolver, org.eclipse.aether.impl.RemoteRepositoryManager, java.util.List)
java.lang.NoSuchMethodException: org.apache.maven.repository.internal.DefaultModelResolver.<init>(org.eclipse.aether.RepositorySystemSession, org.eclipse.aether.RequestTrace, java.lang.String, org.eclipse.aether.impl.ArtifactResolver, org.eclipse.aether.impl.VersionRangeResolver, org.eclipse.aether.impl.RemoteRepositoryManager, java.util.List)
        at java.base/java.lang.Class.getConstructor0(Class.java:3349)
        at java.base/java.lang.Class.getConstructor(Class.java:2151)
        at clojure.tools.deps.alpha.extensions.pom$model_resolver.invokeStatic(pom.clj:49)
[...]
#2020-01-1719:30Alex Miller (Clojure team)What are your full deps? And do they include pomegranate?#2020-01-1719:31niwinzhttps://github.com/uxbox/uxbox/blob/docker/arm64-adaptation/backend/deps.edn#2020-01-1719:31niwinzhmm not explicitly#2020-01-1719:31niwinzwith 1.10.1.492 works ok...#2020-01-1719:34niwinzit fails always after com/cognitect/transit-clj/0.8.319/transit-clj-0.8.319.pom i dont know if is something relevant#2020-01-1719:35Alex Miller (Clojure team)Happy to help diagnose but you’re going to have to give me more context to repro#2020-01-1719:38niwinzat this momment i don't have more context, maybe tomorrow i try to investigate more. If i found something "relevant" i ping you#2020-01-1719:38niwinzthanks#2020-01-1719:42niwinzok is something related to :local/root#2020-01-1719:43niwinzi commented that dependencies and the -Stree is now can resolve all deps..#2020-01-1719:47niwinzthe simplest reproducible case is (deps.edn):
{:deps {somepackage {:local/root "path/to/package" 
:deps/manifest :pom}}}
#2020-01-1719:52Alex Miller (Clojure team)thx, repro'ed. I'll take a look#2020-01-1719:52Alex Miller (Clojure team)must be some drift in the pom model reading code across lib versions#2020-01-1721:27Alex Miller (Clojure team)fixed, but might be a couple days before I can release on brew (they gets antsy if you release too frequently)#2020-01-1721:28Alex Miller (Clojure team)should downgrade for the moment to 492#2020-01-1800:37niwinzthanks! no problem i stay with 492 for the moment#2020-01-2021:27Alex Miller (Clojure team)new release 1.10.1.502 is now available and fixes this issue#2020-01-1814:05vemv👋 Did you know that Github offers a variety of RSS feeds (commits, releases), and that relatedly, Slack offers a RSS subscription bot? In face of that I created https://github.com/nedap/lein-subscribable-urls which helps you creating a large feed out of your dependency chain. The result is similar to #announcements but maybe a bit more diverse (not every clj author hangs out in Clojurians), and selective. Hope some will give it good use!#2020-01-1817:20lispycloudsReleased 0.4.0 of https://github.com/lispyclouds/clj-docker-client : An idiomatic, data-driven, REPL friendly Clojure Docker client. This is a full rewrite of the lib and is completely data driven and takes all its inspiration from Cognitect's aws-api client. Powered by Docker's REST API, this supports ALL of docker and is very REPL friendly too! Head over to #docker for further discussions 😄#2020-01-2009:03SwazmHi! I need a little help 😁 Could you please tell me what cloud platform are you using? if you are using one.#2020-01-2009:07p-himikAWS and Heroku. How does it help you?#2020-01-2009:13SwazmThank you, we are doing a research on the most used cloud platforms
#2020-01-2009:14pezThis is the wrong channel to post questions. It is for announcements. The posts here are syndicated and reposted here and there on the internets.#2020-01-2009:15Swazmow ok sorry#2020-01-2009:18pezI'm not sure which channel would be the right one,.. But #off-topic actually has more subscribers, and if you give the question some context, you'll probably be able to get help with the research.#2020-01-2009:27SwazmThank you very much @U0ETXRFEW 😁 i will try there#2020-01-2022:27mauricio.szaboHi! Just published a new version of the Socket REPL package for Atom, Chlorine - https://atom.io/packages/chlorine Version 0.4.0 adds support for "goto var definition" for most REPLs (before, it only supported Clojure. Now, it supports ClojureScript (with Shadow-CLJS), ClojureCLR, Clojerl, Babashka and Joker! Discussions on #chlorine channel 🙂#2020-01-2112:05carocadparcera v0.11.0 is now available with Clojurescript support 🚀 https://github.com/carocad/parcera#2020-01-2112:35niwinznice, i just looking for something like this#2020-01-2117:43hindolWhat are some use cases for this library?#2020-01-2118:13carocad@UJRDALZA5 whenever you want to analyze clojure code without worrying about it being executed on your system (see security risks of read-string)#2020-01-2118:47niwinzmy use case is a script that collects translation messages on clojurescript code. i have previously used the reader but it need too many hacks because it evaluates some code... with that library i can just parse the files without evaluating it#2020-01-2118:48niwinz@U0LJU20SJ i found that only top level forms have metadata, it is posible to have metadata on "all" expressions? I need line number of expersions...#2020-01-2118:53carocad@U06B73YQJ not sure what you mean. Can you give me an example ?#2020-01-2119:09niwinzright now, if i execute (meta (second (parcera.core/ast somedata))) , it will return something like {:start {:row 272, :column 0}...} but if i do the same over an expression a little deeper, it always returns nil so I deduce that only top level forms has metadata...#2020-01-2119:11niwinzfor my use case i need that metadata on all possible forms, because im parsing cljs files and looking for (tr "some.translation.string") ... and it would be awesome have a line number of that form#2020-01-2119:13niwinzExample:
"(form)=>" (:list (:symbol "tr") (:whitespace " ") (:string "\"ds.color-lightbox.title\"") (:whitespace " "))
"(meta)=>" nil
"(form)=>" (:list (:symbol "tr") (:whitespace " ") (:string "\"ds.color-lightbox.add\""))
"(meta)=>" nil
#2020-01-2119:16carocadmmmm that is weird …. if I execute the code below on parcera itself all forms have metadata:
(for [node (tree-seq seq? seq (parcera/ast (slurp "./src/clojure/parcera/core.cljc")))
      :when (seq? node)
      :when (not (contains? #{:whitespace :comment} (first node)))]
  (let [code (parcera/code node)]
    [(meta node) (str (subs code 0 (min (count code) 10))
                      " ... ")]))
could you give that a try and let me know ?
#2020-01-2119:25niwinzstrange, this code works as expected yes...#2020-01-2119:25niwinzi need to investigate more...#2020-01-2119:26carocadparcera should give you metadata on all forms. However, the metadata is only attached to the parser rules, for example [:symbol "hello"] has metadata but "hello" does not. Maybe you are trying to extract it on the wrong place ?#2020-01-2119:28niwinzyeah, im aware of that, I'm trying extract metadata from (:list (:symbol "tr") ...)#2020-01-2119:29carocadlet me know if this turns out into a bug 😉#2020-01-2119:30niwinzok, thanks!!#2020-01-2119:32niwinzim using walk/postwalk, is the unique difference to your code, maybe postwalk is doing something that i don't expect... I go to try with tree-seq...#2020-01-2119:39niwinzYep, i confirm, postwalk is stripping metadata, sorry for bothering!#2020-01-2119:58carocadoh yeah I think I heard sometime ago about that bug in postwalk. afaik there is a jira ticket for in on clojure core#2020-01-2119:59carocadseems it was fixed: https://clojure.atlassian.net/browse/CLJ-2031#2020-01-2115:16Alex Miller (Clojure team)Take the 2020 Clojure Community Survey now! https://surveymonkey.com/r/clojure2020 We greatly appreciate your feedback and all results will be released. Survey ends this Thu Jan 23....#2020-01-2119:17miroHello Everyone! Just finished a new blog post (aka tutorial): https://www.titanoboa.io/java-repl.html As you may (or may not) know, my workflow platform tianoboa is also trying to be friendly to java programmers with limited (or no) clojure experience. So to try to bring the clojure experience to the java masses, I created also a REPL for java lambdas (yay!) in titanoboa's GUI. This post explains how it works and how you can use it.#2020-01-2302:51practicalli-johnThis channel is for announcing releases of new libraries and their majore updates. Please post articles, tutorials in the #news-and-articles channel. Thank you.#2020-01-2213:09LuFork v1.2.4 - Form library for reagent & re-frame. 🍴 With this version, you can now debounce OR throttle your send-server-request handler, used for live input validation (server side) or any server operation really https://github.com/luciodale/fork#2020-01-2214:59wilkerlucio[com.wsscode/edn-json "1.0.3"] is out! New things on this version: - Support for json-like encoding, this works the same as the previous encoder, but returns massaged EDN instead of native JSON, this way this fn can also run in CLJ environments - Add option to enable/disable special list types encoding - Documentation updated with new things. Check it out at: https://github.com/wilkerlucio/edn-json#2020-01-2219:13metehanhttps://gitduck.com/watch/5e2887db94bb32d590d04e3e I am streaming my code if somone interested in re-frame you can watch and chat with me 🙂#2020-01-2302:54practicalli-johnThis channel is for new projects and libraries and any major updates. Please post live coding, articles, tutorials in the #news-and-articles channel. Or if broadcasts scheduled in advance then use the #events channel. Thank you.#2020-01-2221:35mikethompsonLein middleware which computes version from the ambient Git context (think tags) lein-git-inject has now reached version 0.0.11 It now feels feature complete and stable https://github.com/day8/lein-git-inject#2020-01-2304:12Alex Miller (Clojure team)Have you completed the State of Clojure Community Survey yet? If not, now's a good time! https://surveymonkey.com/r/2020clojure#2020-01-2319:31borkdudesci, a Clojure interpreter for the JVM/GraalVM/NodeJS/browser, used in tools like babashka, bootleg, malli and dad, v0.0.12 https://github.com/borkdude/sci/releases/tag/v0.0.12 follow up in #babashka#2020-01-2404:08caioJust released the first stable version of tank, a pure Clojure lightweight library of fault tolerance idioms https://github.com/caioaao/tank#2020-01-2410:10Jivago Alves@U0GRKUGLQ I’m just curious if you are aware of https://github.com/resilience4clj and if so what would be the reason you created tank for. Thanks for the library though!#2020-01-2421:01caiohey Jivago! No, I didn't know this. looks pretty good#2020-01-2521:19Jivago AlvesPlease feel free to take a closer look. Perhaps mention it as an alternative to your library on your README and when we should use yours instead. Thanks!#2020-01-2603:45caioYeah, I'm planning on doing that. It didn't exist when I first released tank, so maybe tank is actually obsolete now, since resilience4clj seems to have a lot more features. Anyway I'll take a closer look at the project when I have the time :)#2020-01-2917:56caio@U4L16CHT9 can you help us out here? 🙂#2020-01-2918:09luchini@U0GRKUGLQ nice work on tank. You can learn more about resilience4clj here: https://www.youtube.com/watch?v=KtN0vqOlmn8#2020-01-2409:56mike_ananevHi! Just releaeed the Simple Library template (slib) for clj-new. This template is based on clj-new and Badigeon tools and can run common tasks (as Leiningen does): • build jar, • compile java sources, • create pom, • sign jar file • local install to .m2 • deploy jar to clojars • run tests using kaocha https://github.com/mikeananev/slib#2020-01-2409:59sogaiulooks very interesting! thanks for sharing.#2020-01-2415:09Alex Miller (Clojure team)thx! I tried the github template path and it failed for me with
Execution error (ExceptionInfo) at clj-new.helpers/resolve-remote-template (helpers.clj:149).
Could not load artifact for template: slib
	Tried coordinates:
		[slib/boot-template "RELEASE"]
		[slib/lein-template "RELEASE"]
#2020-01-2415:10Alex Miller (Clojure team)I'm using clj-new 0.8.5, which is the version in the clj-new readme#2020-01-2415:53mike_ananev@U064X3EF3 hi! What command did you use to run? try this command (from doc) : clj -A:new https://github.com/mikeananev/slib@3c427a64ec03fcf618b9e55559345e76e08e8b76 qwerty/asd#2020-01-2415:53mike_ananevI have clj-new 0.8.5#2020-01-2415:55Alex Miller (Clojure team)that's what I ran#2020-01-2415:55Alex Miller (Clojure team)
$ clj -A:new  qwerty/asd

Failed with: org.apache.maven.repository.internal.DefaultModelResolver.<init>(org.eclipse.aether.RepositorySystemSession,org.eclipse.aether.RequestTrace,java.lang.String,org.eclipse.aether.impl.ArtifactResolver,org.eclipse.aether.impl.VersionRangeResolver,org.eclipse.aether.impl.RemoteRepositoryManager,java.util.List)
Execution error (ExceptionInfo) at clj-new.helpers/resolve-remote-template (helpers.clj:149).
Could not load artifact for template: slib
	Tried coordinates:
		[slib/boot-template "RELEASE"]
		[slib/lein-template "RELEASE"]

Full report at:
/var/folders/2k/2l7ch1xn7lb5gj86tgp1ygww0000gn/T/clojure-13105343161273067757.edn
#2020-01-2415:56Alex Miller (Clojure team)oh, I may have a hacked up env, hang on#2020-01-2416:01Alex Miller (Clojure team)taking this to #tools-deps#2020-01-2410:01mike_ananevHere is another one for building uberjars. https://github.com/mikeananev/sapp#2020-01-2410:11sogaiui'm not much of an nrepl user myself, but from the deps.edn files it looks like both slib and sapp support a convenient way to start an repl repl. i didn't notice that in the docs. perhaps it'd be worth mentioning? in any case, this looks nice too :thumbsup:#2020-01-2412:50blueberryNew release, 0.15.0, of the DLFP book, with a chapter on classifying IMDB sentiments with the deep network you develop and train with software where you wrote every single piece of Clojure code. https://aiprobook.com/deep-learning-for-programmers?source=cslack&amp;release=0.15.0#2020-01-2417:41practicalli-johnBook and book updates are more effectively communicated in the #news-and-articles channel. Please use that channel for messages like this to to avoid annoying the community. Thank you#2020-01-2420:07hindolExercism is looking for additional maintainers. Perhaps you can help flesh out the exercises for the Clojure track? https://twitter.com/exercism_io/status/1215288391656448000?s=20#2020-01-2510:33mike_ananevSimple metrics library release. https://github.com/redstarssystems/metrics#2020-01-2523:56danielcomptonhttps://www.clojuriststogether.org/news/q1-2020-funding-announcement/ Clojurists Together (thanks to our generous members) is thrilled to be supporting Reagent, Ring, Fireplace, and Calva with $9,000 each over the next three months#2020-01-2608:52pezThis is wonderful! I'm so happy and grateful that @U9A1RLFNV took this on and that Clojurists Together decided to fund him. I will support the effort with time i can free up. Calva will improve and its foundations will strengthen, which is a very good thing for vscode Clojurians.#2020-01-2710:35borkdudeclj-kondo v2020.01.27: better detection of missing test assertions and other enhancements. follow up in #clj-kondo. https://github.com/borkdude/clj-kondo/releases/tag/v2020.01.27#2020-01-2721:06carocadparcera v0.11.1 is out with a minor bug fix for metadata. https://github.com/carocad/parcera#2020-01-2721:09yogthosJetBrains is having a developer survey, let them know you're using Clojure :) https://surveys.jetbrains.com/s3/a10-developer-ecosystem-survey-2020#2020-01-2722:19p-himikA hundred of development-related questions, then suddenly: "Do you possess a Cryptocurrency?"#2020-01-2723:22yogthos😆#2020-01-2804:53Vincent CantinThe last page (of the optional part) was a psychology test.#2020-01-2805:09p-himikYeah, such questions make sense when they're in the optional part. But whether I have and whether I want to have cryptocurrency, in the main section? I don't know about that.#2020-01-2808:19markusWow that was a long one. Pretty good though, except some repeated or very similar questions. I wonder why there were so many questions about personality and world view.#2020-01-2810:01MattiasHmm. Didn’t get (or notice...) any crypto question. Maybe it was smart enough to figure out the answer in advance. 🙂#2020-01-2816:24dharriganThat puzzled me too.#2020-01-2901:55wilkerlucio[com.wsscode/edn-json "1.0.4"] is out! New things on this version: - Add support for ::encode-value for custom value encoding - Add support for ::encode-map-key for custom map keys encoding Check it out at: https://github.com/wilkerlucio/edn-json (edited)#2020-01-2902:00p-himikThe README says: "Transit produces JSON suitable for faithful round-trips in and out of EDN types, but it’s not good for consuming as JSON." Could you explain why Transit is not good for consuming as JSON?#2020-01-2902:02p-himikOne thing I'd guess is that it represents maps as arrays.#2020-01-2902:13wilkerlucioyup 🙂#2020-01-2902:14wilkerluciothe idea of this library is to be a middle term between preserving the original EDN and making it confortable for JSON tools to work with#2020-01-2902:15wilkerlucioone way to look at is, is imagine a version of clj->js that can reverse EDN later with more fidelity, makes sense?#2020-01-2902:17p-himikYeah, thanks. A strange thing I just noticed:
(= (edn->json :keyword) "__edn-value|:keyword")
(= (edn->json {:foo 42}) #js {":foo" 42})
By itself, a keyword is encoded, but as a key map, it is not. It makes it indistinguishable from strings that start with a colon.
#2020-01-2904:07wilkerlucioyeah, that's a trade-off I was willing to make, given how common those are in the clojure world and how rare they are for regular JSON cases, more info: https://github.com/wilkerlucio/edn-json#encoding-decisions#2020-01-2909:33niwinzTransit has :json-verbose option that conserves the structure (don't uses lists for objects...) and is pretty comfortable to parse as json...#2020-01-2909:36niwinzEncoding {:foo "bar", :baz [1 2]} looks like {"~:foo":"bar","~:baz":[1,2]}#2020-01-2909:37p-himikOh, that's right! I completely missed that :json and :json-verbose differ in more than keyword caching.#2020-01-2909:38p-himikAh, not so fast - it still uses an array if there are composite keys.#2020-01-2909:39p-himik{[0 1] 2} becomes {"~#cmap":[[0,1],2]}.#2020-01-2909:42niwinzseesm something very unusual when you using a data structure that you have in mind share with "javascript" (or to be interporable with json...)#2020-01-2916:51lurodrigoHi folks! Released [polvo/firestore-clj "0.1.3"] It's a client for Google's Firestore database. It's quite idiomatic, supports both pulling data once and real-time data by materializing query results as atoms (and some lower-level stuff to). All functions are type-hinted so there's no reflection behind the scenes. Check it out at https://github.com/polvotech/firestore-clj#2020-01-2923:22borkdudebabashka, a native Clojure scripting tool, v0.0.67 adds clojure.test, hierarchies, multimethods and more: https://github.com/borkdude/babashka/releases/tag/v0.0.67 follow up in #babashka#2020-01-3121:01borkdudeTwo bugfixes and one new feature: https://github.com/borkdude/babashka/releases/tag/v0.0.68#2020-01-3021:56Alex Miller (Clojure team)tools.deps.graph 0.2.30 is now available and fixes an issue with --size and git deps#2020-01-3104:08Alex Miller (Clojure team)tools.deps.alpha 0.8.661 and clj 1.10.1.507 are now available • New: concurrent downloads make things significantly faster when downloading lots of stuff • New: -Sthreads can be used to explicitly set the concurrency level, but you generally shouldn't need it • New: -- can be used in clj as a separator between clj dep args and clojure.main args. For example clj -A:tool -- -A:foo will activate the tool alias, which may specify a main class, then -A:foo will be passed to that program (thanks Dominic Monroe!) • Fix: regression in -Spom not populating <repositories> since tda 0.8.573 • Fix: manifest type lookup on resolved git dep coordinates (probably of interest to almost no one, but affected tools.deps.graph) #2020-01-3107:01CrispinBootleg 0.1.7 released. Now with support for XML output, environment variables, command line args, standard in processing and java.time! https://github.com/retrogradeorbit/bootleg#2020-01-3114:07mauricio.szaboJust published Chlorine 0.4.3 for Atom. On this release, support for Suitable ClojureScript autocomplete (if its on the classpath), some fixes for autocomplete (sometimes it did crash the editor!) and some other small fix 🙂. Discussions on #chlorine#2020-01-3120:34lurodrigo[polvo/firestore-clj "0.3.0"] released. Now with support for batched writes and transactions, and finer control over representation of results as clojure data. Also, update and map -like helpers for transactions that fit the "apply function on field/doc/many docs" model https://github.com/polvotech/firestore-clj#2020-02-0211:32borkdudejet, a command line tool to convert between JSON, EDN and Transit v0.0.11: finally a Windows build! https://github.com/borkdude/jet/releases/tag/v0.0.11#2020-02-0312:36Ivar Refsdal[ivarref/datomic-schema "0.2.0"] is released. This library provides a reader literal to make writing Datomic schemas easier and more succinct. It plugs well into both REPL usage and io.rkn/conformity. This is the first time I'm announcing a library I've written. Yay! https://github.com/ivarref/datomic-schema#2020-02-0323:44steveb8nthis is great. I did something similar using spec https://gist.github.com/stevebuik/17ed50824f1bb814fab9e556a37cf18a but I like your idea more#2020-02-0521:59Ivar RefsdalThanks 🙂#2020-02-0422:12lispycloudsReleased 0.5.0 of https://github.com/lispyclouds/clj-docker-client - Adds support for bidirectional socket I/O from attaching to containers (something only the official Go and Python libs can; and now Clojure can too! 😎) - Configurable timeouts for daemon connections. - Ability to handle undocumented/experimental docker APIs - Document usage with REBL Follow up in #docker#2020-02-0507:41jacekschaeClojureScript Podcast is back with a 3rd season! This season is all about build tools! First episode with Phil Hagelberg, creator of Lein https://clojurescriptpodcast.com/#2020-02-0508:28borkdudeawesome! been waiting for new Clojure podcasts#2020-02-0514:00practicalli-john@U8A5NMMGD Ideally posts about blogs, podcasts, videos should be posted to the #news-and-articles channel of this slack community, making those posts easier to find. Great to have you back for a 3rd season.#2020-02-0515:26jacekschaeSeems like I have been caught by the Clojurians Police 🚨 Will do Sir! Thanks for letting me know 👍#2020-02-0517:00practicalli-johnWe are very friendly 'police' and trying to make sure the right people can find your content in this fast moving stream of data that is Clojurians Slack as well as finding it on the two archives (zulip and clojurians-log) 😁#2020-02-0509:57dominicmI did some timings on the effects of direct function use a vs indirect use #(a). I uploaded the results and scripts to https://github.com/SevereOverfl0w/direct-performance I wanted to know if making code REPL friendly is bad for performance, and if so, how bad?#2020-02-0513:28vemvmy usual complaint against (def a b) and friends is loss of metadata, which is why if the pattern is absolutely needed, I'd use Potemkin for the wrapping#2020-02-0516:06dominicmTbh, in this case you can use a directly for benchmark. I'm trying to reference the notion of passing the function value to another function, eg a Web server#2020-02-0515:25blueberryReleased ClojureCL 0.14.0: High Performance Computing and GPGPU in Clojure: access the supercomputer on your desktop - https://clojurecl.uncomplicate.org#2020-02-0515:37blueberryClojureCUDA 0.9.0 has just been released, bringing the support for #CUDA 10.2. High-performance GPU computing in Clojure! https://clojurecuda.uncomplicate.org#2020-02-0515:52blueberryNeanderthal 0.27.0 released, with support for latest #CUDA 10.2. Fast native-speed matrix and linear algebra in #clojure Supports all mainstream hardware: CPU, Nvidia GPU, and AMG GPU in the same process, interactively! https://neanderthal.uncomplicate.org#2020-02-0517:11yogthosStack Overflow 2020 developer survey is now open https://stackoverflow.blog/2020/02/05/the-2020-developer-survey-is-now-open/#2020-02-0517:59seancorfieldGiven that Clojure isn't listed as an option in that survey and needs to be written in, this is a case where the broadest audience possible for the announcement is reasonable. As an Admin, I agree that in general posts about surveys/blogs/podcasts etc do not belong here.#2020-02-0520:48yogthosI think this is a very important survey as SO is very widely used, what would be a better channel to put this in?#2020-02-0523:22seancorfield@U050CBXUZ As far as I'm concerned, this was appropriate for #announcements#2020-02-0523:22yogthos👍#2020-02-0523:23yogthosmisread your comment initially :)#2020-02-0601:37mauricio.szaboHello, just published the Atom package for Clojure/Script Chlorine version 0.4.4. In this version, not much for Clojure people, but for ClojureScript + Shadow-CLJS, there's an experimental feature (you need to check the configuration on settings): it adds a new way to evaluate ClojureScript that's probably faster, more reliable, and can, in the future, add lots of interesting features. Discussions on #chlorine channel#2020-02-0614:30lurodrigo[polvo/firestore-clj "1.1.2"] released. since last announcement lots of stuff was added. now with full support for subcollections, cursors, print methods making repl experimentation more convenient, and a few more convenience functions, including streaming updates as manifold streams, getting the changes between snapshots as clojure data, and batched coll deletion. by now I think we've covered almost all features provided by the original Java API, and further releases are going to be mostly for minor additions and bug fixing https://github.com/polvotech/firestore-clj#2020-02-0709:44Alex FedotovHey there! ✌️ My name is Alex, I’m a product designer at Miro (http://miro.com) — the online collaborative whiteboarding platform for distributed teams. We want to make the 1st session in our product better, and if you haven’t used Miro before, I’d like to invite you to participate in a quick usability testing. If you’re open to taking part in my small research, please go through invitation form ☺️ https://miro-survey.typeform.com/to/TlRH2r#2020-02-0709:45imreHey Alex, welcome. Please read the channel topic, I believe this message belongs to a different channel.#2020-02-0817:35hlshipwalmartlabs/vizdeps 0.2.0 vizdeps is a Leiningen plugin that uses Graphviz to present your project's dependency tree as a diagram. It's especially useful for identifying and resolving version conflicts. This release of vizdeps works with Leiningen 2.8 and above. https://github.com/walmartlabs/vizdeps#2020-02-0917:06hlshipIt's also still compatible with 2.7.1.#2020-02-0817:35hlshiphttps://github.com/walmartlabs/vizdeps#2020-02-0821:41tony.kayI’m happy to announce that Fulcro RAD now has an alpha-quality release. Fulcro RAD is a set of rapid-application development libraries that allow you to select a storage back-end (e.g. SQL, Datomic, etc.), a default rendering front-end (e.g. Semantic UI Web, Bootstrap Web, React Native, Electron, etc.) and generate everything from database schema, to a network API, to a fully-functioning UI. This first release has support for forms, a single web renderer, and Datomic (with SQL in the works). Adapters and plugins should be relatively trivial to implement for any React-based UI, and storage system. https://github.com/fulcrologic/fulcro-rad https://github.com/fulcrologic/fulcro-rad-datomic https://github.com/fulcrologic/fulcro-rad-sql and there is a start on a developer’s guide here: http://book.fulcrologic.com/RAD.html NOTE: This is very alpha software; however it is already capable of doing reasonably complex full-stack forms in new or existing Fulcro applications. I’m working rapidly to make the documentation more complete, and the demo easier to run. https://github.com/fulcrologic/fulcro-rad-demo#2020-02-0916:25vemvhttps://github.com/nedap/utils.modular 's implement allows you to: * Use metadata-based protocol extension (for a flawless Reloaded workflow) in a less error-prone manner * accordingly, use Sierra's Component library without defrecord (an usual perceived source of verbosity) * also accordingly, use spec-backed, plain, reusable defns whereas one would otherwise use defrecord and friends, which aren't as tight. There's a handful of similar functions in the lib. Hope some find it useful!#2020-02-0916:31vemvThe idea of metadata-based Reloaded comes from an answer I got in Clojurians a year ago for the described problem. Thanks! Has been a smooth trip. It's been satisfying to use older libs (like Component) with newer techniques, as opposed to replacing the libs altogether. As a possibly interesting observation, when something seems flawed maybe it just needs some incremental work, instead of rework.#2020-02-0919:19just.sultanovHi, there! I just published a library for unified responses for the Clojure and ClojureScript. The practice of using this approach in several projects has proven to be very convenient and flexible. https://github.com/just-sultanov/clj-unifier#2020-02-0920:38dominicmThis is pretty neat, do you have included keyword sets that are supported? Eg cognitect anomalies?#2020-02-0920:47just.sultanov@U09LZR36F In my projects I used keyword sets (from @U072WS7PE’s talk about bias decisions), but for the shared library I decided not to restrict users#2020-02-1002:31cjsauerThis is really clever. Thanks for sharing. #2020-02-1003:13cjsauerLooking at the code, this seems like it could be a general replacement for exceptions. It reminds me of the Result type in Rust. #2020-02-1008:13dominicm@U1EQNSHL4 it would be pretty handy for users to include some. Not as a restriction, but to reduce boilerplate in applications. You already have a bunch of keys you can use that way.#2020-02-1008:21just.sultanov@U09LZR36F Thank you for your feedback. I want to add thread macro like a some-> and some->> for pipelines. And I can add something like this:#2020-02-1008:22just.sultanovcommon response types#2020-02-1008:22just.sultanov
(def success-types
  "Unified common `success` types."
  [:success :ok :created :accepted])


(def error-types
  "Unified common `error` types."
  [:error :unavailable :interrupted :incorrect :forbidden :unsupported :not-found :conflict :fault :busy])
#2020-02-1008:23just.sultanovand http status types#2020-02-1008:24just.sultanov
(def informational-status-codes
  "HTTP `informational` 1xx status codes."
  {:continue            100
   :switching-protocols 101
   :processing          102
   :early-hints         103})


(def success-status-codes
  "HTTP `success` 2xx status codes."
  {:ok                            200
   :created                       201
   :accepted                      202
   :non-authoritative-information 203
   :no-content                    204
   :reset-content                 205
   :partial-content               206})


(def redirection-status-codes
  "HTTP `redirection` 3xx status codes."
  {:multiple-choices   300
   :moved-permanently  301
   :found              302
   :see-other          303
   :not-modified       304
   :use-proxy          305
   :switch-proxy       306
   :temporary-redirect 307
   :permanent-redirect 308})


(def client-error-status-codes
  "HTTP `client error` 4xx status codes."
  {:bad-request                     400
   :unauthorized                    401
   :payment-required                402
   :forbidden                       403
   :not-found                       404
   :method-not-allowed              405
   :not-acceptable                  406
   :proxy-authentication-required   407
   :request-timeout                 408
   :conflict                        409
   :gone                            410
   :length-required                 411
   :precondition-failed             412
   :request-entity-too-large        413
   :request-uri-too-long            414
   :unsupported-media-type          415
   :requested-range-not-satisfiable 416
   :expectation-failed              417})


(def server-error-status-codes
  "HTTP `server error` 5xx status codes."
  {:internal-server-error      500
   :not-implemented            501
   :bad-gateway                502
   :service-unavailable        503
   :gateway-timeout            504
   :http-version-not-supported 505})


(def response-type->http-status
  "HTTP status codes."
  (merge informational-status-codes
         success-status-codes
         redirection-status-codes
         client-error-status-codes
         server-error-status-codes))


(def http-status->response-type
  "Mapping http status to response type."
  (set/map-invert response-type->http-status))


(defn to-status
  "Returns a http status by the given response type."
  [response-type]
  (get response-type->http-status response-type))


(defn to-type
  "Returns a response type by the given http status."
  [http-status]
  (get http-status->response-type http-status))


(def default-success-type
  "Default unified http `success` type."
  :ok)


(def default-client-error-type
  "Default unified http `client error` type."
  :bad-request)


(def default-server-error-type
  "Default unified http `server error` type."
  :internal-server-error)
#2020-02-1008:27just.sultanov@U09LZR36F Will it be convenient for you? For me, yes :)#2020-02-1008:37dominicmI think that would be handy yeah :). Do you usually write your keywords in a http style?#2020-02-1008:42just.sultanovNo, I have a mapper for business logic keywords with HTTP keywords. And this transformation takes place in one single place. Very comfortably#2020-02-1008:43just.sultanovE.g. :incorrect -> :bad-request#2020-02-1008:49just.sultanovI have one pubic API for my business logic with general response types and several mappers, e.g. for HTTP and WebSocket.#2020-02-1008:50just.sultanovI want to add a similar example to the README#2020-02-1015:12just.sultanovI added -> “thread-first” and ->> “thread-last” macros in the latest release (v0.0.5)#2020-02-1000:01CandidJoker v0.14.2 has been released: https://github.com/candid82/joker/releases/tag/v0.14.2#2020-02-1000:13mauricio.szaboJust published a new version of Socket REPL plugin for Atom, Chlorine. On this version, if you're using Shadow-CLJS, it will show the result of promises when they're resolved! Now, there's still work to do (it's behind "experimental features config" after all) as inline results don't get updated, but on the Console tab, you'll see promises on JS changing from "pending" to their values when they become ready. Discussions, bugs, ideas on #chlorine channel.#2020-02-1116:16chrisnlibpython-clj has been undergoing quite a bit of development. There is now extensible datafy/nav support for python modules and classes. We have much better (but still imperfect) environment support. We have a clj-template so you can use Sean Corfield's clj-new system. We also spent some time profiling things to make sure we pay as little of a cost as possible for crossing the language boundaries. The cost is still there of course but we reduced it by a factor of at least 3 or so. We moved GC to be cooperatively done in the python thread. So if you want to use python from only on clojure thread that is now possible. Carin Meier has been doing quite a few demonstration projects using Nextjournal. I really suggest checking those out as you can simply hit 'remix' and start playing with the code. If you haven't checked out Nextjournal in general then by all means, it is a great system for online live-notebook coding. • Changelog: https://github.com/clj-python/libpython-clj/blob/master/CHANGELOG.md • Github Org: https://github.com/clj-python/ • Carin's NextJournal Page - https://nextjournal.com/gigasquid/ • Kommen's NextJournal Page - https://nextjournal.com/kommen Enjoy 🙂#2020-02-1116:40p-himikA few questions: 1. Can it be considered production-ready? E.g. no breaking changes are expected. 2. Python 3.7 is supported, right? 3. Imagining that there's Jython 3 (there isn't), would libpython-clj be better? If so, how? 4. Same question about graalpython (assuming I decide to run everything on GraalVM). I couldn't quickly find answers in the repo's README and in the links that I've visited.#2020-02-1120:53chrisn1. Yes, the interface hasn't changed for a while. 2. Yep. The system is python-version independent, you can select the python you want on initialization. 3. libpython-clj runs cpython with all the extensions. Jython, for instance, doesn't support numpy and definitely doesn't support things like mxnet and such. 4. See response above. The C layer of python requires the interpreter to load the extensions. Without reimplementing a significant portion of the interpreter (which Graal people may do but Jython people can't) you can't load the C extensions. #2020-02-1120:54p-himikThanks!#2020-02-1116:54plexusAnnouncing Regal, like Hiccup but for regex. Cross-platform CLJC and able to create test.check generators. This is very much a preview/alpha release. Breakage expected, input and feedback (and contributions) welcome! For now only available through Github. Follow-up in #lambdaisland please. https://github.com/lambdaisland/regal#2020-02-1116:55Noah BogartDang, this looks cool as heck#2020-02-1117:01kennyYeah, this looks awesome!#2020-02-1117:22nateWow!#2020-02-1117:26pezThis is so cool!#2020-02-1117:28fmnoiseawesome stuff!#2020-02-1201:41bartukaWooow, congrats!!!#2020-02-1209:22plexusThe generator namespace should actually load now :) thanks @U04V15CAJ for reporting#2020-02-1219:07EddieFantastic! This will be very useful.#2020-02-1808:12marcusYeah, it is great!#2020-02-1808:15marcusIs there currently a way or plans for predefined character classes, e.g. \s (space, tab, ...) ?#2020-02-1117:16dchelimskyCognitect Labs' aws-api 0.8.430 https://groups.google.com/forum/#!topic/clojure/U9chWFVDC_g#2020-02-1323:12hlshipcom.walmartlabs/lacinia 0.36.0 and com.walmartlabs/lacinia-pedestal 0.13.0 Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Featured changes in 0.36.0: - Improved support for parsing/serializing enums - Query execution can now be limited with a timeout - Improved efficiency when parallelizing query execution across threads lacinia-pedestal adds support for accessing GraphQL as an HTTP endpoint GitHub repo: https://github.com/walmartlabs/lacinia-pedestal Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/ Featured changes in 0.13.0: - Exeptions during query execution are now caught and result in a 500 status response - Added support for setting the subscription initial payload#2020-02-1406:39orestisMany thanks for working on Lacinia! We are really happy with it. #2020-02-1415:03katoxHi everyone, I am pleased to announce the first release of neanderthal-stick 0.1.0 - save/load extensions to Dragan's Neaderthal matrix library. The focus of Neanderthal-stick is saving neanderthal data to a disk and importing them back fast and with as little ceremony as possible. Note that Neanderthal-stick is able to save the data that are currently on the GPU and load them elsewhere (or vice versa) - switching native/CUDA/OpenCL contexts as necessary. The library uses Nippy under the hood to store the metadata and pure direct buffers to save the actual contents of vectors or matrices. It doesn't attempt to support any of myriads of existing data formats that are used in the wild but it can be used as a support code if anyone wanted to do that. Gihub: https://github.com/katox/neanderthal-stick/ Dependency info: https://clojars.org/neanderthal-stick#2020-02-1417:49FrederikAwesome, really useful piece of functionality!!#2020-02-1419:42dchelimsky[ANN] Cognitect Labs' aws-api 0.8.437 is now available! https://groups.google.com/forum/#!topic/clojure/AIQzOkhUDBU#2020-02-1421:09jarrodctaylor[ANN] https://github.com/JarrodCTaylor/schema-cartographer Schema Cartographer provides a means to visualize, navigate, create, edit and share the relationships that exist in your Datomic schema.#2020-02-1508:49bozhidar[ANN] CIDER 0.24 (“India”) is out! Check out the release notes here https://github.com/clojure-emacs/cider/releases/tag/v0.24.0 Enjoy!#2020-02-1510:42borkdudeclj-kondo v2020.02.15: return type inference, unsorted required namespaces linter and more. thanks to all who contributed. https://github.com/borkdude/clj-kondo/releases/tag/v2020.02.15 follow up in #clj-kondo#2020-02-1604:26tony.kayI’ve released Fulcro 3.1.12 to clojars. Fulcro is a library for building data-driven full-stack applications for React web/native. https://github.com/fulcrologic/fulcro This version includes support for floating roots. Fulcro normally has you construct your app as a reified view in code and data. This has worked very well for the many apps we’ve built with it, but occasionally you want to use a plain React js lib that expects an arbitrary sub-root to be usable as a standalone thing. This release allows you to have Fulcro control the data needs of such components while allowing them to look like vanilla React components. This should allow easier use of things like js ecosystem routers and navigators. See the docstrings here for instructions: https://github.com/fulcrologic/fulcro/blob/develop/src/main/com/fulcrologic/fulcro/rendering/multiple_roots_renderer.cljc#2020-02-1611:36dominicmhttps://github.com/SevereOverfl0w/vizns Vizns is a tool for visualizing the relationship between namespaces and libraries. You can see a demo of it running on an open source Clojure application at https://dominic.io/vizns/camelot/root.svg You can click on nodes to navigate around (hint: You may need to scroll a little, as you'll start in the top left in your browser).#2020-02-1721:44djanusHello! After more than 3 years in the making, I am proud to announce the release of Skyscraper 0.3.0, a scraping framework that helps you build structured dumps of whole websites. Home: https://github.com/nathell/skyscraper/ Major improvements in 0.3.0: • Skyscraper has been rewritten from scratch to be asynchronous and multithreaded, based on core.async. • Skyscraper now supports saving the scrape results to a SQLite database. • In addition to the classic scrape function that returns a lazy sequence of nodes, there is an alternative, non-lazy, imperative interface (`scrape!`) that treats producing new results as side-effects. • reaver (using JSoup) is now available as an optional underlying HTML parsing engine, as an alternative to Enlive. See NEWS.md for a complete list. I’m particularly happy about the database abilities of this release – for a glimpse of what it can do, see https://cljdoc.org/d/skyscraper/skyscraper/0.3.0/doc/database-integration. Happy scraping! 🏛️#2020-02-1815:22Alex Miller (Clojure team)InsideClojure - 1.0 all the things https://insideclojure.org/2020/02/18/lib-version/ - please read if you maintain a Clojure lib (discussion to #clojure)#2020-02-1815:28gerredthanks for this @U064X3EF3. maybe a bit parallel to the thoughts here. what I did appreciate is how @U0ENYLGTA laid out exactly the versioning scheme that aws-api and service packages use. I agree with what you're saying there, I would suspect it's a lot of people defaulting to what they see in other ecosystems, even prior to semver, when they see 0.x. with that aws-api versioning scheme well known, I wouldn't particularly care if it was 0.x or 1.x or 2.x or whatever.#2020-02-1815:28gerredheck, a lot of projects (see the ill-fated CoreOS) use time since their epoch for versions#2020-02-1815:30gerredto avoid parroting you further, gets me thinking about for my projects writing a "Versioning Scheme" section in the readme, even if it's only a sentence or two, to make it obvious why a version changes when it does.#2020-02-1815:32dchelimsky@U05509S91 that would be great. There seems to be an expectation that Semver is the default. Being explicit about it (even if what you're saying is "we do semver" is a good thing IMO.#2020-02-1815:35vlaaadhaving version like v2020.02.18 seems clear enough an indicator that it’s not a semver#2020-02-1815:35dchelimskyFor the next few hundred years, sure 😉#2020-02-1815:38gerredeven in that (ok, expand to versioning policy) - it's nice to know the policy around those versions if there is one, or that it's just "date when we kicked this out to maven"#2020-02-1815:39gerrednot to make anyone stare into the void of Kubernetes and turn to stone, but over in our operator project we have an entire enhancement proposal around how we version: https://github.com/kudobuilder/kudo/blob/master/keps/0019-package-api-versioning.md#2020-02-1815:39gerredi digress. 😄 thanks @U064X3EF3 for the post!#2020-02-1815:42Alex Miller (Clojure team)I'm adding this to contrib lib readmes as I change them: "This project follows the version scheme MAJOR.MINOR.COMMITS where MAJOR and MINOR provide some relative indication of the size of the change, but do not follow semantic versioning. In general, all changes endeavor to be non-breaking (by moving to new names rather than by breaking existing names). COMMITS is an ever-increasing counter of commits since the beginning of this repository."#2020-02-1821:17Alex Miller (Clojure team)Per the previous post, there are some new contrib releases today: • core.async 1.0.567 • tools.gitlibs 1.0.83 • data.csv 1.0.0 • data.json 1.0.0 • core.logic 1.0.0 • core.match 1.0.0 • data.zip 1.0.0 • java.classpath 1.0.0 • tools.namespace 1.0.0 • data.generators 1.0.0 • test.generative 1.0.0 • data.priority-map 1.0.0 • java.jmx 1.0.0 • test.check 1.0.0 • data.fressian 1.0.0 • tools.analyzer 1.0.0 - thanks Nicola! • tools.analyzer.jvm 1.0.0 - thanks Nicola!#2020-02-1821:18Alex Miller (Clojure team)and prob a few more over the coming days, but that's mostly it#2020-02-1823:49gerred@U064X3EF3 wdyt about a 1.x.x of https://github.com/cognitect/transit-clj ?#2020-02-1823:49gerredor as before, clarification of version policy 😉#2020-02-1823:59Alex Miller (Clojure team)Sure, will loook at it later#2020-02-1907:21bedersIt’s a good thing. Well done #2020-02-1909:24rickmoynihanjust a minor FYI: the test.check changelog hasn’t been updated: https://github.com/clojure/test.check/blob/master/CHANGELOG.markdown#2020-02-1913:35Alex Miller (Clojure team)Fixed#2020-02-1913:35Alex Miller (Clojure team)@U05509S91 released transit-java and transit-clj yesterday #2020-02-1913:36gerredthank you sir!#2020-02-1914:59avocadeHehe love it. There's always a different between what's right (`semver is borked`), and what's otherwise conventional in the "business" (e.g. what clojure newbies will assume). Good call 🙂#2020-02-1915:07aviJust curious… if the new versioning scheme is MAJOR.MINOR.COMMITS then why do almost all of these version identifiers have a third segment that’s 0?#2020-02-1915:13Alex Miller (Clojure team)older projects started that way and it's been easier to just retain that than move to the commit scheme (which currently requires a manual step)#2020-02-1915:14Alex Miller (Clojure team)on the infinite todo list is better automation that works with the contrib build box setup, and then it would be easier to move to that#2020-02-1915:15Alex Miller (Clojure team)I've updated readme's on those projects above as I released to describe the version scheme (whichever it is)#2020-02-1915:18aviAh, I see. Makes sense. Thanks!#2020-02-1921:38gerredfound another possible one, cc @U04V70XH6 https://github.com/clojure/tools.cli#2020-02-1921:38gerredoh#2020-02-1921:39gerred@U04V70XH6 literally just updated this 😂#2020-02-1921:39gerrednevermind#2020-02-1921:44seancorfield@U05509S91 tools.cli is going to get multi-valued option arguments per https://clojure.atlassian.net/browse/TCLI-96 and then it will be released as 1.0.x; core.cache and core.memoize also have 1.0.x releases coming -- Fogus and I are collaborating on those.#2020-02-1921:46seancorfieldjava.jdbc will stay at 0.7.11 because seancorfield/next.jdbc is essentially the 1.0.x release of that (with a different API). java.data got a 1.0.x release yesterday. I think that covers everything I maintain directly in Contrib.#2020-02-1921:46gerredyup makes sense#2020-02-1921:58Alex Miller (Clojure team)any contrib lib not yet 1.0 is either lightly used and non-critical or the process for getting there is in the hands of project owners and will happen in due time as seen fit#2020-02-1922:00gerredmakes sense. I'm just calling out ones that I actively touch as I touch them, happened to be doing some arg parsing and figured I'd throw in the note. 🙂#2020-02-1922:02Alex Miller (Clojure team)in addition to the ones just mentioned, tools.logging and data.xml are others that could potentially be updated. the latter in particular has been in perma-alpha for a long time#2020-02-1922:03Alex Miller (Clojure team)tools.deps.alpha is definitely headed there, but has more decisions about being non-alpha named#2020-02-1922:03gerredyeah for sure#2020-02-1922:05Alex Miller (Clojure team)other than those, I'm not planning on actively doing any more, but other owners of less frequently active libs may get to them at some point (like math.combinatorics or something)#2020-02-1922:07gerredfor those there may not even be a reason (arguably) to kick out another version unless there's an actual change in the package itself#2020-02-1922:07gerred¯\(ツ)/¯#2020-02-1922:07Alex Miller (Clojure team)correct#2020-02-1906:51seancorfieldorg.clojure/java.data {:mvn/version "1.0.64"} -- https://github.com/clojure/java.data -- functions for working with Java Beans and "builders" as Clojure data -- is now following the MAJOR.MINOR.COMMITS versioning scheme per other Contribs listed above. Follow-up in #clojure#2020-02-1911:32thumbnailformatting-stack is a formatting+linting solution that wraps some of the most popular libraries in the space (cljfmt, refactor-nrepl, eastwood, clj-kondo and more), making them more accurate, efficient and repl-friendly, avoiding cold-starts. We’ve been using this internally for the past year to unify all config / tooling among our devs. It’s typically integrated with tools.namespace and Git, but we also place a lot of emphasis on agnosticism: you can configure and run our ‘glue’ however you please. With a bit of luck it could become community-driven project, gradually. In the end want this to be a solution as helpful as possible - PRs welcome! https://github.com/nedap/formatting-stack#2020-02-1921:21Bobbi TowersThis one thing condenses like 8000 hours of reading 6 yr old blog posts 😜#2020-02-1921:44dotemacsWow, this is pretty cool, thanks for this!#2020-02-2018:49thumbnail@U8LB00QMD most of the team had no prior experience and the integrated formatting with linting to get everything straight has proven really helpful :)#2020-02-1922:19oliyI'm pleased to announce superlifter, a DataLoader for Clojure. Feedback welcome! https://github.com/oliyh/superlifter#2020-02-1922:33lilactownthis has been sorely needed for awhile! nice job!#2020-02-1922:34lilactownalso TIL about funcool/urania#2020-02-2007:13oliyThanks, urania does the clever bit!#2020-02-1923:51borkdudebb v0.0.71: implemented clojure.repl/doc, added clojure.pprint/pprint and some other stuff - follow up in #babashka https://github.com/borkdude/babashka/releases/tag/v0.0.71#2020-02-2000:37andy.fingerhuthttp://ClojureDocs.org has been updated from Clojure 1.9.0 to Clojure 1.10.1 today. Thanks to site creator and maintainer Zachary Kim and I believe also Ilya Bernshteyn for helping with the update.#2020-02-2012:35mauricio.szaboJust published Chlorine version 0.4.7, socket REPL package for Atom. It adds autocomplete for bb v0.0.71 🙂. In this version, it Chlorine is also trying to get rid of an old dependency called Ink that, on my profiles, showed that can slow down older computers. It's behind a configuration (enable experimental features) because it can be unstable...#2020-02-2012:42borkdude❤️#2020-02-2013:10littleliI think it's time for me to try this whole setup on Windows...#2020-02-2016:56seancorfieldorg.clojure/tools.cli {:mvn/version "1.0.194"} -- https://github.com/clojure/tools.cli -- tools for working with command line arguments -- is now following the MAJOR.MINOR.COMMITS versioning scheme per other Contribs listed above. Follow-up in #clojure#2020-02-2419:54aviFYI the releases page is still showing an older release as the latest:#2020-02-2419:59seancorfieldIt says "Show 2 newer tags"#2020-02-2419:59aviYes, I saw that#2020-02-2419:59aviI’m super familiar with the releases feature of GitHub… I just shared this because this situation can sometimes trip up people who are not familiar with it#2020-02-2420:00aviIf someone’s in a rush they could easily miss that link#2020-02-2420:00seancorfieldContrib projects have tags created via the Maven release process. I guess I accidentally created a GitHub release for 0.4.1 for some reason...#2020-02-2420:01aviYour call if you want to do something about this, but I’d suggest that it could be a little confusing to sometimes create a “release” entity for a release and sometimes not do so.#2020-02-2420:01aviIt’d be perfectly reasonable to delete that release entity#2020-02-2420:01seancorfieldDeleted the GH release 🙂#2020-02-2420:01avi:thumbsup:#2020-02-2420:03seancorfieldNo idea why I created a GH release for 0.4.1. Must have been having a bad day 👀#2020-02-2420:03avi🍭#2020-02-2017:19bartukahttps://github.com/wandersoncferreira/mamulengo --- small project that might be ready for some users! Lightweight database based on datascript with durable store and time travel for Clojure(Script). Not everything must be highly scalable and distributed! Sometimes I just need SQLite and now I can have it with datalog all over the place 😃#2020-02-2017:30borkdudeHow does it compare to datahike (#datahike)?#2020-02-2017:33dominicmI think the main point is that it doesn't scale and distribute. It only runs on one machine I guess.#2020-02-2017:34borkdudeI think datahike supports just writing to a directory/files on disk, without needing a database (postgres/h2). Since this lib also supports CLJS > localstorage, that doesn't seem like a big leap?#2020-02-2017:34borkdudebtw, interesting project, thanks for sharing bartuka#2020-02-2017:35dominicmDidn't know that 🙂#2020-02-2017:35borkdudeIt's the closest datomic thing to sqlite that I know of#2020-02-2017:35bartuka@U04V15CAJ cool, if I had found this last month probably I wouldn't write this from scratch! haha I will take a look at datahike when have sometime available!#2020-02-2017:36refsetI think a big difference is that datahike persists all indexes, whereas this rebuilds the other indexes from datoms each time it starts up: https://github.com/wandersoncferreira/mamulengo/blob/master/src/mamulengo/internals.cljc#L38#2020-02-2021:46zane> if I had found this last month probably I wouldn’t write this from scratch! I wonder if it might be helpful to have a dedicated channel for “Has anyone already solved this problem?” or “Does this library already exist?” kinds of questions. :thinking_face:#2020-02-2021:47borkdude#find-my-lib#2020-02-2021:48zanePerfect!#2020-02-2022:00bartukahahah! I have to be honest, my search was very poor and I learned so much in the process of making it! hehe But in fact, this channel is necessary!!!#2020-02-2022:26Alex Miller (Clojure team)Clojure 2020 survey results! https://clojure.org/news/2020/02/20/state-of-clojure-2020#2020-02-2022:44Andy WoottonAlternative interpretation of graphs: a lot of tinkering was converted to real work and companies that use Clojure grew fast.#2020-02-2022:55seancorfield@U064X3EF3 Looks like the org size is reported twice instead of # people using Clojure?#2020-02-2023:03Alex Miller (Clojure team)shoot, thx#2020-02-2023:03Alex Miller (Clojure team)too many images#2020-02-2023:11Alex Miller (Clojure team)fixed#2020-02-2102:43sogaiusome of the images have text labels that end in "..." -- that makes it a bit difficult to know what is being referred to exactly. is there something i'm missing that might help me to see the labels more fully?#2020-02-2102:50Alex Miller (Clojure team)if you go to the full results (linked at top and bottom), you can dive into or download all the data in detail#2020-02-2102:51Alex Miller (Clojure team)https://www.surveymonkey.com/results/SM-CDBF7CYT7/#2020-02-2102:51sogaiuthanks!#2020-02-2107:06pezClojure really is a work tool. This is Calva users over the last two months. Roughly half the numbers during weekends, and see what happened during x-mas. (If you think you see a general increasing trend, I agree with you. I think Clojure is growing as we speak. Homebrew install stats indicates the same.)#2020-02-2023:04Alex Miller (Clojure team)and some of my own feedback on the open text results: https://insideclojure.org/2020/02/20/clojure-survey/#2020-02-2115:16Alex Miller (Clojure team)there was a change (https://github.com/Homebrew/homebrew-core/commit/715900bfab494ccee4cadeea902d80ccce6e7a16) made in the homebrew clojure formula to install the latest adoptopenjdk, rather than just checking for an existing Java 8+. This was made by someone outside the Clojure community that just goes around changing things to use adoptopenjdk. This change is wrong, imo. I have filed an issue at https://github.com/Homebrew/homebrew-core/issues/50536 - if you have had surprising experiences, a comment on the issue would be helpful.#2020-02-2115:22Alex Miller (Clojure team)...and they just closed the issue#2020-02-2115:23hindolDo you think it makes sense for the Clojure community to take over the package in a tap?#2020-02-2115:24Michael J DorianThat seems... remarkably hostile of them.#2020-02-2115:31Alex Miller (Clojure team)well I have been contemplating making our own tap for a while. this may have just tipped the scale.#2020-02-2115:32Alex Miller (Clojure team)it is really a pain though to have both#2020-02-2116:01lilactownYeah ideally we would pull it from th main repo#2020-02-2116:28gerredheh the homebrew version of maven also has this as a dependency now, oddly that's what bit me#2020-02-2116:58vemv> that just goes around changing things to use adoptopenjdk. There's the more charitable interpretation that the Homebrew maintainers want to keep/enforce a consistent implementation and policy. Two members of the Homebrew team suggest JAVA_HOME, which doesn't sound too bad. Most importantly, that technical alternative doesn't appear addressed in the 2 threads tbh setting up JAVA_HOME sounds like bit of a pita - one would always want a smooth automagical installation instead, particulaly for beginners. But it's reasonable to see why that not may be attainable in a huge project that specifically has the policy of disregarding LTS versions: https://github.com/Homebrew/homebrew-core/commit/715900bfab494ccee4cadeea902d80ccce6e7a16#r37415334#2020-02-2118:17andy.fingerhutTo test, I just updated clojure on my Mac using brew, and it did install openjdk13 via Brew, which had not been installed on my system before. I have several 2-line bash scripts on my system that simply set the JAVA_HOME env variable to a different JDK install on my system, and also add the binary directory to my PATH, then ran clojure , and it used the one in JAVA_HOME, not openjdk13. So it is working as they advertise.#2020-02-2118:19andy.fingerhutWhether or not someone wants http://clojure.org install instructions to mention things like this when installing view Homebrew, I do not know.#2020-02-2221:49Space-OtterNoobie CS-Student here. Roast me if I am wrong but shouldn’t a package manger provide you the recommended way to install software? The argument “You need Java to use Clojure, we install that dependency.” by SMillerDev sounds a bit off to me. Maybe they don’t see the impact of such decision. To treat Clojure and its dependencies like every other piece of software … seems to be a very “naive” thought. The most programs aren’t also environments like Clojure.#2020-02-2222:40andy.fingerhutThe same argument could be made for other developer tools/environments that require Java, like Maven, and they did it for Maven, too. Rule one of open source: every open source project has decision makers, and they make the decisions. Others might not like them, but the project decision makers are entirely within their rights to make them. In response, others can complain, argue, provide evidence, open issues, etc. In the end, the decision makers of a project decide.#2020-02-2222:40andy.fingerhutAnyone can also choose to create their own fork of the open source project, under the appropriate license, and do the work themselves. For some things, that is worth the effort. For most, it often is not -- it just takes too much time to maintain a fork in many cases.#2020-02-2300:19Space-OtterI totally agree with you. I just thought the hole thing about brew formulas was to be transparent and as flexible as possible. So that the maintainer/decision maker of a formula has the right set of tools to communicate and deploy his software.#2020-02-2301:04andy.fingerhutAnd the decision makers get to decide what high level statements like "the maintainer/decision maker of a formula has the right set of tools to communicate and deploy his software." means, if that is even what the Homebrew project claims to provide.#2020-02-2409:26StefanI also ran into this with maven this weekend. I was already using asdf-vm (https://asdf-vm.com/) for managing nodejs, java, python, etc, so I just installed maven through asdf instead of brew. I guess I’ll also install Clojure using asdf in the future.#2020-02-2717:24adamfeldman@U064X3EF3 I’m working on updating the Clojure plugin for the asdf version manager. Where do I go to find the enumerated list of all point releases of Clojure e.g. 1.10.1.469 vs. 1.10.1.510 vs 1.10.1.510_1? This URL doesn’t have the point releases: https://repo1.maven.org/maven2/org/clojure/clojure/1.10.1/ (found via https://clojure.org/community/downloads) @UGNFXV1FA I’m also a very happy asdf user. The “blessed” Clojure plugin for asdf https://github.com/halcyon/asdf-clojure hasn’t been kept up-to-date with minor releases. I have a forked copy of the versions file @ https://github.com/adamfeldman/asdf-clojure/blob/master/bin/versions#2020-02-2717:26Alex Miller (Clojure team)The full version only applies to the Clojure tools, which is not on maven anywhere#2020-02-2717:29Alex Miller (Clojure team)The https://github.com/clojure/brew-install/blob/1.10.1/CHANGELOG.md is a human source of that info or git tags on that repo#2020-02-2717:30Alex Miller (Clojure team)And soon https://github.com/clojure/homebrew-tools will be an alternate source of info#2020-02-2717:30Alex Miller (Clojure team)Working on that now#2020-02-2717:50adamfeldmanThat’s awesome, looking forward to adopting your new Homebrew tap. I don’t feel a strong need to use asdf to manage my Clojure versions, because I don’t often find myself switching between Clojure versions (typically just update my system to the latest).#2020-02-2116:57hkuptyFor those interested in protobuf/clj interfacing, just pushed the first alpha version: https://github.com/hkupty/defteron#2020-02-2117:01dominicmIs this runtime?!#2020-02-2117:17hkuptyYes.#2020-02-2117:19hkuptyI was thinking on a macro-based alternative for known classes, but it's not the focus for my usecase...#2020-02-2117:24gklijsConfluent is busy adding support for protobuf to schema registry (it's in current master) so might be interesting for #apache-kafka #jackdaw#2020-02-2117:24dominicmThis is incredible. The need to precompile protobuf has always been a problem for me.#2020-02-2117:25dominicmI assume it can work on the binary form?#2020-02-2117:33hkuptyHum, maybe we're talking about different things. This is runtime reflection on top of protobuf java objects. Is this still what you're looking for?#2020-02-2117:34dominicmOh. I thought it was protobuf serialization.#2020-02-2117:34dominicmAnd deserialization.
#2020-02-2117:35hkuptyThat's not a bad idea to be honest#2020-02-2117:35hkuptyI'll look into that#2020-02-2117:36dominicmI've always thought the compilation step and external cli is just a hindrance to the repl with it. And setup for new people joining a project.#2020-02-2117:48hindolWhat kind of help wanted? This project is interesting to me.#2020-02-2118:03hkuptyWell, currently it only deals with java->clj conversion of protobuf, but @U09LZR36F gave me a brilliant idea and I'll investigate further. Feel free to fork, test, open issues or PRs. :)#2020-02-2118:21eccentric JNice! About 2 years ago I wrote a small CLI to query NYC realtime subway data. I struggled my way through the protobuf support but eventually got it working. I bet this tool could help a lot!#2020-02-2310:58benedeknew version of https://github.com/benedekfazekas/morpheus available. morpheus can generate graphs of a project’s variables. new version generates navigable SVGs. it also implements datafy protocols if you want to use the API instead of the CLI. powered by clj-kondo#2020-02-2311:01vemvinteresting! what kind of question would be answered by these graphs?#2020-02-2311:05benedeksuppose it helps you visualise the dependencies of a given function in your code on the var level#2020-02-2311:06borkdudeThanks, awesome stuff#2020-02-2311:06AvichalIts interesting. I was thinking if I am new to a code base, maybe visualizing a function this way might help. But I am still yet to try.#2020-02-2311:07benedekmaybe the graph could be used to spot things in the code that could be refactored — like a function which bridges two other functions but has no other incoming or outgoing edges: maybe good candidate to inline#2020-02-2311:09benedekyeah good use case too @U3ZPBUVJ7#2020-02-2311:55Aleksanderdo you see it could be integrated into editors?#2020-02-2312:28benedekdon't see any reason why not. apart from dependency on graphiz being installed#2020-02-2318:24vemv> suppose it helps you visualise the dependencies of a given function in your code on the var level ah, like a clj-refactor.el find-usages. great!#2020-02-2408:39otfromI've used lein plugins like this before to understand an unfamiliar code base and refactor it. This is awesome!#2020-02-2409:38benedekthanks @U0525KG62 :)#2020-02-2322:32uochanI just released vim-iced v1.0.0, Clojure Interactive Development Environment for Vim8/Neovim https://twitter.com/uochan/status/1231707071940194304#2020-02-2322:43jsnIs there some "why vim-iced?", or/and something about differences from existing vim clojure plugins (like e.g. fireplace)?#2020-02-2322:48uochan@UTQEPUEH4 Currently, there is no comparison with other vim plugins.#2020-02-2406:16pezLooks super nice!#2020-02-2413:00uosl@UTQEPUEH4 I think writing something like that would be difficult since the plugins change all the time. Based on my experience with both, vim-fireplace has a quasi-repl and supports evaluating code in a buffer, while vim-iced only does the latter. vim-iced is a more complete solution, in that you just run iced repl and it will start your lein/boot/deps project, without having to tweak the configs to add nrepl and so on.#2020-02-2413:01uoslI could probably go on with mentioning all the differences, but maybe this isn't the right place [=#2020-02-2408:23danabornew version of mate-clj adding new core functions support for easy debugging 😎 https://github.com/AppsFlyer/mate-clj#2020-02-2411:40bartukaNice work! I was thinking about a library like that. Small suggestion, would be nice to change the versioning number to the proposed standard by Alex Miller (https://clojurians.slack.com/archives/C06MAR553/p1582039369250600) off course, if you agree with that rsrsrs (or only to let it more explicit which standard are you following)#2020-02-2419:49greglookcljstyle 0.12.1 is now available! In addition to being ~40% faster than 0.11, it can also be used directly via tools.deps and the clj CLI. https://github.com/greglook/cljstyle#2020-02-2419:58borkdudenice stuff! I noticed one commit about a weird kondo error. that might have been fixed by now:
$ clj-kondo --lint - <<< '(bound-fn compute! [])'
linting took 6ms, errors: 0, warnings: 0
#2020-02-2419:59greglookah, nice - that was the expedient fix at the time, good to know it was fixed in the tool 👍#2020-02-2504:48mike_ananevhttps://github.com/redstarssystems/pbuilder#2020-02-2517:55eggsyntaxHi Mike! Is there an easy way to summarize why someone would choose to use pbuilder rather than badigeon, ie what pbuilder's main value add is?#2020-02-2518:19mike_ananevpbuilder is used for my internal purposes and I share it for community as is. Motivation to build it was: 1. using badigeon directly you should adapt its code for your needs and put sources directly to project. it is not convenient for several teams, cause we need some standard way to build CI/CD ( as Leiningen provides). It becomes unmanageable if several teams produce their own sources. 2. there is no release of badigeon on clojars, so there is no jar which we can use in Maven infrastructure. It prevents from using Badigeon in private enterprise network where Maven infrastructure is a standard. 3. we need something that Leiningen provides in project lifecycle but for tools.deps world. Badigeon is best candidate for tools.deps world IMO but it provides a core low level functionality. We need simple standard command for example to make release a library or to build uberjar without sources. Using Badigeon directly is too low level and you should make too many movements. I made a high level wrapper which is enough for us.#2020-02-2618:15eggsyntaxThat all makes sense. Thanks!#2020-02-2710:27Ivar RefsdalNice tool! I also found badigeon too low level. PS. Have you considered building docker images with this tool directly from the JVM? pack.alpha [1] does this. My own (undocumented) tool pikkpakk [2], which is fairly compatible with pack.alpha, also does this + AOT compiles reachable code by default. [1] https://github.com/juxt/pack.alpha#docker-image [2] https://github.com/ivarref/pikkpakk#2020-02-2510:46Daniel SlutskySome parts of the international Clojure DataScience meetup in Berlin this Thursday will be live streamed. https://ti.to/scicloj/international-clojure-data-science-meetup-in-berlin For updates and discussion, follow the this thread: https://twitter.com/scicloj/status/1232254548732993536 For more details, it is recommended to use this Zulip stream: https://clojurians.zulipchat.com/#narrow/stream/224454-international-data-science-meetup-20200227#2020-02-2513:53henrikAppreciate the update! This channel is primarily for release announcements, however. Check out #events for meetup announcements etc.#2020-02-2517:23Daniel SlutskyThanks, @U06B8J0AJ, and sorry for the conusion!#2020-02-2517:21lilactownhttps://clojurians.slack.com/archives/CRRJBCX7S/p1582650365020100#2020-02-2607:28CrispinSpire is a new project building a pragmatic system provisioner as a clojure DSL. It can be used in place of older tools like ansible, fabric, capistrano and the like and works in a similar fashion. The first alpha pre-release (0.1.0-alpha.1) is up for people willing to test and experiment. Things could change and there is much documentation to write, so open tickets for whatever doesn't work or should be present. Available here: https://github.com/epiccastle/spire#2020-02-2610:51jeroenvandijk@U1QQJJK89 Does it also make sense to use spire for when you are already on the instance? I’m thinking about an AWS userdata script. I can imagine the Spire dsl offers some benefits there over self-written install logic (e.g. even when written in Babashka)#2020-02-2610:54CrispinYou can use it to localhost if you want. Although its primarily intended to "reach out" from your local workstation to remote machines. You can also make scripts with a shebang that will take arguments on the command line to do things or pick targets. https://github.com/epiccastle/spire/blob/master/doc/howto.md#read-the-launch-arguments#2020-02-2610:56CrispinIf you do use it in an interesting way like this, let me know.#2020-02-2610:56CrispinI'm not exactly sure how people will use it. Time will tell...#2020-02-2610:59borkdude@U0FT7SRLP when you're already on the machine, you might also want to be looking at dad by @UBL24PLE6: https://github.com/liquidz/dad#2020-02-2611:00borkdudemaybe they can even work in complement#2020-02-2611:01jeroenvandijkCool! Thank you both!#2020-02-2611:22Crispinyou could deploy dad to the machine(s) with spire!#2020-02-2614:43lukaszThis is great - I'm currently refactoring some of our infra setup and out of frustration I had to put Ansible in a docker container, as managing python dependencies and packages is becoming challenging. I will try it out in my spare time and see if an equivalent of Ansible's docker_container module is feasible 😉#2020-02-2615:28Captain PorcelainNot sure if anybody is interested in this, but I was frustrated in the state of the marginalia documentation generator. I've forked it to include deps support, the unmerged pr for an open reader bug and theming support. https://github.com/captain-porcelain/sidenotes#2020-02-2615:55hindolI was in your position as well. So far, only cljdoc works for me.#2020-02-2615:56hindolSo, thanks a lot for working on this! This can be really useful.#2020-02-2615:56Captain PorcelainMaybe give sidenotes a try and let me know if it is useful to you.#2020-02-2615:58hindolDon't know how hard it would be to port cljdoc's theme to this.#2020-02-2616:01Captain PorcelainI haven't used cljdoc so far, so I can't say anything about the effort.#2020-02-2616:09hindolHere is an example: https://cljdoc.org/d/com.github.hindol/json-rpc.core/0.1.4-1/doc/readme Looks really clean. Kind of similar to how Github renders documentation.#2020-02-2616:13Captain PorcelainYes, it's really clean but quite different from what marginalia and sidenotes create.#2020-02-2718:42LuFork v1.2.5 - Form library for reagent & re-frame 🍴 https://github.com/luciodale/fork#2020-02-2722:37Oliver GeorgeHi @Lu, what are your thoughts on storing the form state in the re-frame app-db? You could allow a reagent cursor to be passed in so that reset! and swap! still work - that might have minimal impact on the code.#2020-02-2723:05LuHi @U055DUUFS, I will give this a thought. Out of curiosity, why do you want to store the form values in the re-frame db before submission?#2020-02-2800:06Oliver GeorgeThat's a good question. I'm not going to have a perfect answer but here's the core approach we use. I think there are two types of state to be considered.  Widget state - like the string a user is typing into an integer field.  Field values - like the integer value the widget produces when the user is finished typing. I’m fine with not seeing the transient state in app-db.  It’s been a peformance issue in the past. A fiddly bit is knowing when transient state becomes field values.  Easy cases are stateless controls like a checkboxes and an input field which provides a clear onblur event. We have complex forms where the current field values can change what is presented.  That can get messy. We store field values in app-db. Handlers and subs apply “form logic” before processing or providing data to views. Examples  • showing/hiding fields • setting error flags & showing error messages • changing options • setting or resetting related field values • enabling save button if validation passes We now lean towards a combination of :default-value and incrementing :key to use uncontrolled inputs which stay in sync app-db form field values (after logic is applied).#2020-02-2802:53CrispinDoes it work with no re-frame at all? I love reagent but dislike and dont use re-frame.#2020-02-2806:05Oliver GeorgeYep, I think so.#2020-02-2810:21Lu@U1QQJJK89 Re-frame is used in a couple of places at the moment.. so it's not completely decoupled from that dependency#2020-02-2814:20Lu@U055DUUFS I see... I used Fork with similar requirements, and what I did was to dispatch re-frame events on blur to store the final input values. You can pretty much do all of the above with the lib, but it would definitely cost you a rewrite... Talking about validation, I assume you want it to run only on the coerced values, so you would not want to use the :validation handler I am providing that runs at each re-render on the local state values... I am not sure whether it makes sense for you to use Fork, as it seems you already have a pretty worked out customized form flow. The question I'd ask myself is whether what you have would look cleaner and more maintainable in Fork. If the answer is yes, I would mock out something and give it go; otherwise, I would just stick with whatever you have in place 🙂#2020-02-2807:07slipsetEastwood v0.3.8 - A Clojure lint tool https://github.com/jonase/eastwood Recent changes includes some fairly significant speedups to the included analyzer.#2020-02-2807:14borkdudeSee you at ClojureD!#2020-02-2807:21slipsetJepp, I’ll be landing in Berlin 1345#2020-02-2814:37souenzzohappy to see deps.edn support#2020-02-2811:47Ashwin Bhaskarhttps://github.com/ashwinbhaskar/google-drive-file-uploader#2020-02-2813:21ataggartclojure.tools.logging 1.0.0 is released and contains a few features you may find useful: https://github.com/clojure/tools.logging/blob/master/CHANGELOG.md#2020-03-0318:48Jakub Holý (HolyJak)Readable means that the Clojure reader can read it in?#2020-03-0403:04ataggart@U0522TWDA In that it behaves somewhat like pr.#2020-03-0403:05ataggartSee the examples here: https://clojure.github.io/tools.logging/#clojure.tools.logging.readable#2020-03-0403:07ataggartI'll update the doc to make the analogy with pr.#2020-02-2819:29seancorfieldseancorfield/next.jdbc {:mvn/version "1.0.384"} -- https://github.com/seancorfield/next-jdbc -- "The next generation of clojure.java.jdbc: a new low-level Clojure wrapper for JDBC-based access to databases." -- mostly documentation updates, but also a few minor performance tweaks for result set builders, and a bug fix to how column name keywords are constructed when the table name is not available. Follow-up in #sql#2020-02-2822:46Alex Miller (Clojure team)If you use brew to install the clojure tools, there is now an official Clojure tap for new releases https://clojure.org/news/2020/02/28/clojure-tap#2020-02-2822:49Alex Miller (Clojure team)brew upgrade clojure/tools/clojure#2020-02-2823:26seancorfieldMight be worth mentioning that if you have clojure installed from the core tap, you have to brew uninstall clojure before you can brew install clojure/tools/clojure#2020-02-2823:34Alex Miller (Clojure team)You can upgrade without doing that#2020-02-2823:35seancorfieldAh, I didn't realize you could upgrade across taps! Nice. #2020-02-2900:36includethis is great! thanks!#2020-02-2907:05pezWouldn't it be best to keep the core tap updated with the stable releases? I'm seeing how many people will try brew install it from there w/o reading up on how it should be done.#2020-02-2908:48kszabo> Anyone can update it, or we may periodically bump it for big releases, but we will not be actively updating it as of now. #2020-02-2908:49kszaboI think it is fine to let the community handle that, AUR does the same for folks on arch and it works out generally well#2020-02-2908:49kszaboI would add a pre-install note though so that ‘naive’ installers can get the official tap#2020-03-0416:39Adrian Smithbrew upgrade clojure/tools/clojure results in `Error: No available formula with the name "clojure/tools/clojure" Please tap it and then try again: brew tap clojure/tools` for me, I have an existing non tap install of Clojure#2020-03-0416:46Alex Miller (Clojure team)there are N paths through this with brew, impossible to predict them all. you might need to brew uninstall clojure first#2020-03-0416:46Alex Miller (Clojure team)or brew tap clojure/tools#2020-03-0416:46Alex Miller (Clojure team)or something else#2020-03-0416:48Alex Miller (Clojure team)brew install clojure then brew upgrade clojure/tools/clojure worked for me, but there can be historical cruft in your brew formulas that affects things#2020-03-0819:04hindolCan the step "brew tap clojure/tools" be added to the documentation itself?#2020-03-0823:54Alex Miller (Clojure team)It’s done automatically when install/upgrade from it, so there’s no need#2020-03-0903:02hindolI needed this step somehow. Brew instructed me to run "brew tap clojure/tools" when I ran "brew upgrade clojure/tools/clojure". I had the core clojure installed already. It's a minor thing though as brew told me what to do.#2020-03-0903:12Alex Miller (Clojure team)as I said above, there are many paths through it with brew (and it's very dependent on your brew history) so it's not really feasible to doc them all. and brew's pretty good about telling you what to do.#2020-02-2916:49bozhidarclj-refactor.el and refactor-nrepl 2.5.0 are out! You can see the important changes here - https://github.com/clojure-emacs/refactor-nrepl/releases/tag/v2.5.0 and https://github.com/clojure-emacs/clj-refactor.el/releases/tag/v2.5.0. While it’s not really obvious there are some big internal changes as well - most notably switching from edn.el to parseedn.el (in clj-refactor.el) and adopting orchard (in refactor-nrepl).#2020-03-0116:17slipsetEastwood v0.3.10 - A Clojure lint tool mainly fixes to regressions introduced in 0.3.8.#2020-03-0204:36Ashwin BhaskarDockerized google drive uploader - https://github.com/ashwinbhaskar/google-drive-file-uploader#2020-03-0307:05seancorfieldseancorfield/readme {:mvn/version "1.0.8"} -- https://github.com/seancorfield/readme -- initial release of a simple library that turns your README.md examples into executable tests! -- follow-up in #testing#2020-03-0309:18hindolThat is a very cool idea. Can this be extended to doc strings (à la doctests)?#2020-03-0309:29pithylessI once played with the docstrings idea, but never did take it much further. https://gist.github.com/pithyless/c7d6954c055ad45b6dfd2fca6ddfcce9#2020-03-0310:50borkdudenice idea!#2020-03-0320:32uochan@UJRDALZA5 How about this library? https://github.com/liquidz/testdoc#2020-03-0320:38hindolI like it. Very clean API.#2020-03-0315:51deep-symmetryAs suggested to me in #clojurescript I am reposting this here: In the course of building a byte field diagram generator I’m creating to port some big LaTeX documents to Asciidoctor/Antora, I have ported Analemma (https://github.com/liebke/analemma) to .cljc so it works in ClojureScript as well as Clojure, and (with David Liebke’s permission) posted a canonical release to Clojars.#2020-03-0319:07Jakub Holý (HolyJak)Readme still reads "Clojure-based", change to Clojure(Script)?#2020-03-0321:22deep-symmetryThe Readme is in some strange format called textile which is pretty opaque to me, so I was afraid to mess with it. I also rationalized ClojureScript as being Clojure-based. 😄 A pull request would be welcome if you think it’s important, though.#2020-03-0519:01Alex Miller (Clojure team)Clojure 1.10.2-alpha1 is now available https://clojure.org/community/devchangelog#_release_1_10_2#2020-03-0519:01Alex Miller (Clojure team)https://clojure.atlassian.net/browse/CLJ-1472 Ensure monitor object is on stack, for verifiers • https://clojure.atlassian.net/browse/CLJ-2502 Fix reflection warnings in clojure.stacktrace/print-stack-trace • https://clojure.atlassian.net/browse/CLJ-2517 More fixes for invocation of static interface methods with primitive args#2020-03-0519:03andy.fingerhutAuto-correct and emotional reactions lead to appearances of emotional instability 🙂#2020-03-0519:06souenzzoNow we can (slowly) include clojure in a "java" android app?#2020-03-0519:08andy.fingerhutProbably best discussed in #clojure or #clojure-android (I do not know if the second one is used much)#2020-03-0519:08borkdudeSee also #graalvm where issue CLJ-1472 as a lot of impact#2020-03-0519:43borkdudeUpgraded all my main GraalVM CLIs to the newest Clojure#2020-03-0521:07seancorfieldWe're running 1.10.2-alpha1 for dev at work. I'm running it on openjdk 14, I think my colleague is using openjdk 11 (which is what we have in production). Will report back if we find anything "odd".#2020-03-0519:04tony.kayFulcro 3.1.17 released to Clojars, includes new support for React Hooks to expand compatibility with vanilla js React libraries. https://github.com/fulcrologic/fulcro http://book.fulcrologic.com/#_react_hooks_support#2020-03-0520:20jeff.terrellNetlify [1] now includes the Clojure CLI in its build image. [2] Netlify is a convenient, dev-friendly way to deploy and host static sites, with a generous free tier. I've written a minimalist static-site generator in Clojure [3] so that I can create sites ([4], [5]) with Markdown content, and it's easy to set up continuous deployment from GitHub/GitLab. It even lets you host custom domain names (bought separately) in the free plan. (I'm not affiliated, just a fan.) [1] https://www.netlify.com/ [2] https://github.com/netlify/build-image/pull/289 [3] https://gitlab.com/unc-app-lab/clj-ssg/ [4] https://comp590-s20.cs.unc.edu/ [5] https://gitlab.com/jeff.terrell/comp590-software-arch-website/#2020-03-0520:28eccentric JNetlify is amazing!!!#2020-03-0522:23deep-symmetryIt was just last night that I needed them in a CI flow, and ended up having to self-install, this is excellent!#2020-03-0607:18solfI was about to say the only issue I had with netlify was lack of server logs, but apparently they have. It costs 9usd/month/website though. It seems fair enough, but I don't really know the usual prices for that#2020-03-0611:50fmjreyFor a static site what kind of server logs do you really need? According to their doc (I'm no user but curious) the serverless function add-on available on the free tier also offers logs for the last hour.#2020-03-0701:54jaihindhreddyUnrelated to post: Thanks a lot for posting your lectures on YouTube! Are very helpful 🔥#2020-03-0703:00jeff.terrellWow! Didn't realize people were actually watching them. But you're welcome!#2020-03-1018:35val_waeselynckDon't forget to mention the amazing immutable deployment features of Netlify, reminiscent of Datomic and Git 😉 (also an unaffiliated fan)#2020-03-0622:25oliyHi everyone, I'm pleased to announce the release of https://github.com/oliyh/re-graph. re-graph is a GraphQL client for Clojurescript and Clojure with re-frame bindings and support for queries, subscriptions and mutations over websocket or HTTP. This release in particular has had a lot of contributions from the community for which I am very thankful! This release changes: • The signature of the `mutate` function which incorrectly took a single vector but now takes varargs in the same way as `query` https://github.com/oliyh/re-graph/pull/55 (thanks https://github.com/loomis) This release adds support for: • Synchronous `mutate` and `query` (Clojure only) https://github.com/oliyh/re-graph/pull/56 (thanks https://github.com/loomis) • Specifying the websocket sub-protocol https://github.com/oliyh/re-graph/issues/53 https://github.com/oliyh/re-graph/pull/62 (thanks https://github.com/jmarca) • Aborting operations via HTTP (experimental) https://github.com/oliyh/re-graph/issues/50 This release improves: • Error handling will no longer overwrite the status or message from the server if they are present https://github.com/oliyh/re-graph/pull/54 (thanks https://github.com/loomis) • The examples in the readme https://github.com/oliyh/re-graph/pull/57 https://github.com/oliyh/re-graph/pull/61 (thanks https://github.com/viebel) Available now on Clojars https://github.com/oliyh/re-graph#2020-03-0710:08borkdudebabashka.curl: A tiny curl wrapper via idiomatic Clojure, inspired by clj-http, Ring and friends. https://github.com/borkdude/babashka.curl. Contributions and feedback welcome.#2020-03-0715:50jerger_at_ddaWe proudly present the first fully functional release of https://github.com/DomainDrivenArchitecture/cryogen-bootstrap We managed to combine the static website generator cryogen with bootstrap4 templates. In order to make template changes more versioned, that's a huge step forward. cryogen & templates are now shipped in one jar! If someone is willing to test, pls. pm - we will provide documentation on demand. Examples of generated website are: https://meissa-gmbh.de or https://domaindrivendesign.org https://social.meissa-gmbh.de/tags/clojure https://social.meissa-gmbh.de/tags/web https://social.meissa-gmbh.de/tags/template#2020-03-0721:57jerger_at_ddawe also enhanced our cryogen-core-fork for being able to serve resources from classpath instead only serving resources from filesystem: https://github.com/DomainDrivenArchitecture/cryogen-core If someone is interested in a spring like overlay-filesystem for clojure, pls. contact We're able and willing to isolate the overlay-fs part in a lib by it's own ... https://social.meissa-gmbh.de/tags/clojre https://social.meissa-gmbh.de/tags/spring https://social.meissa-gmbh.de/tags/overlayfs#2020-03-0806:45CrispinSpire 0.1.0-alpha.2 released. https://github.com/epiccastle/spire/releases/tag/v0.1.0-alpha.2 Spire is a clojure DSL built with graal for provisioning remote unix machines over ssh. This release includes: * bugfixes * new stat module * fish shell support * better FreeBSD target support#2020-03-0808:20Bobbi TowersI made a version of 4clojure that runs in your shell as a babashka script: https://github.com/porkostomus/4bb Enjoy!#2020-03-0817:20nenadalmHi. Since place I go to play board games with strangers has pretty bad list of board games (names with languages only: http://bohemiaboardsandbrews.com/games/ - no pictures, ...) I've made small project that parses that list and downloads some additional info from boardgamegeek (with caching as I am allowed to do ~1 request per 2 seconds): https://github.com/nenadalm/bbb-game-list. Just simple table with sorting for now. Filters and other features might be added some day. So if you needed something like that...#2020-03-0818:15CandidJoker v0.15.0 is released https://github.com/candid82/joker/releases/tag/v0.15.0#2020-03-0821:02mauricio.szaboChlorine v0.4.13 is released. On this version, some improvements on the removal of Ink (an Atom package dependency of Chlorine) and now we have clickable stacktraces (that will open that specific file, even if it's inside a JAR)! Also, on ClojureScript side, stacktraces are parsed with their specific source maps (if they exist), and goto-file will also work on then (be it a JS or CLJS file). Discussions on #chlorine channel#2020-03-1016:26Jacob O'BryantJust released the first version of trident.firestore, a ClojureScript wrapper for Firebase's Firestore DB https://github.com/jacobobryant/trident/blob/master/doc/firestore.md#2020-03-1108:53just.sultanovHi, there! I’ve just released a new version of clj-unifier library with unified http responses. Any feedback - welcome. Link: https://github.com/just-sultanov/clj-unifier#2020-03-1318:27Jakub Holý (HolyJak)Hi! I'd really appreciate a Rationale section in the Readme to understand what problem this tries to solve.#2020-03-1110:12borkdudehttps://github.com/borkdude/clj-reflector-graal-java11-fix This library offers a fix for an issue that GraalVM native-image JDK11 has with clojure.lang.Reflector's use of MethodHandle. Just include it on your classpath while compiling a binary and that's it!#2020-03-1120:50pezCalva v2.0.82 just released. It has so many updates since I last announced a change! You'll have to check the CHANGELOG for that. For this post, let it suffice with the great addition of configurable formatting of @nbardiuk's making: https://clojureverse.org/t/calva-gets-configurable-formatting/5596#2020-03-1120:58Jamie Rumbelowexcellent, excellent work on calva. lack of decent VS code clj support has been preventing me from working on clj apps more regularly. thrilled that calva is getting close to besting emacs!#2020-03-1121:10pezThanks. CIDER is still way ahead. It is amazing how that project has provided so much tooling that Calva can leverage. Engineering at its very finest.#2020-03-1200:02sogaiuthe demo animated gif was meta -- took my old brain a bit to realize what was going on 🙂#2020-03-1200:04sogaiui found it confusing at first, but now i am finding that it may be a nice way to get a feel for the various possibilities :thumbsup:#2020-03-1205:33pezIt's a bit like a REPL for the config. A bit mind bending to me when I first tried it. I think it will fit in well when someone needs to match some particular formatting policy. #2020-03-1206:25sogaiuhe he -- sooner or later we'll have a machine-learning-based thing that will deduce the formatting settings 😉#2020-03-1207:24pezI like that idea! Possibly Parinfer can be put to that use. Now I must put shackles on myself not to start trying to do it!#2020-03-1121:32uochanJust released vim-iced ver 1.1.0, Clojure Interactive Development Environment for Vim8/Neovim. https://twitter.com/uochan/status/1237852655025704960#2020-03-1200:06sogaiuthanks for your continued (additional) support of socket repls!#2020-03-1207:09sogaiui got socket repl completion working for something outside of the current ns (in the image augistints.edit (`ae`) 🙂 however, i didn't have any success for the string prep. i expected to see at least prepend-to-defn-body show up. in the image there is a def of prepend-to-defn-body. i got a message that ended with "Pattern not found". should this have worked?#2020-03-1209:54borkdudeThank you for supporting babashka!#2020-03-1220:43uochan@UG1C3AD5Z It should be. Could you try :IcedRequire before completion?#2020-03-1222:45sogaiu@UBL24PLE6 doing :IcedRequire first makes it work, ty! without doing :IcedRequire first it doesn't seem to work (i tried again after restarting both the jvm and neovim).#2020-03-1222:57uochan@UG1C3AD5Z thanks! nrepl automatically executes IcedRequire when connecting, so I'll consider prepl doing too.#2020-03-1300:39sogaiui've thought a bit about automatically having IcedRequire happen upon connection. i'm not sure what it does, but perhaps it is load-file or require? i'm not sure if socket-repl using folks would necessarily want their code loaded by default upon connection. that's not the way i'm used to anyway -- i do all of the loading manually. may be it's obvious, but i evaluated the ns form before trying to complete prep. my expectation was that this should have made completion work. in any case, i hope some of this can help with thinking about what (if anything) to do.#2020-03-1301:06sogaiuactually, bad expectation - i don't think evaluating the ns should do it, rather manually loading is better. sorry for any confusion :)#2020-03-1301:23uochan@UG1C3AD5Z Thanks for your advice! It is load-file. The initial ns on connection is usually user, and sometimes I open a file different from the initial ns and connect. For nrepl, vim-iced executes IcedRequire to avoid evaluating form with unexpected ns. It may be good to allow user selecting the behavior :)#2020-03-1218:36Alex Miller (Clojure team)A new guide on how to use trusty compile to improve dev startup time https://clojure.org/guides/dev_startup_time#2020-03-1218:44Alex Miller (Clojure team)Often the Clojure community survey receives many requests for faster startup time. There are however several distinct startup time use cases. One of those most frequently mentioned is development startup time (whether that's starting a repl that loads a user.clj or running a dev web server). It is not widely appreciated how easy it is to use Clojure's existing mechanisms to AOT compile your startup dependencies and use them while you develop, shaving 10s of seconds off of every start. Hopefully this guide will help. I am certain there is a lot that can be done in frequently used templates to leverage this idea and I would encourage any toolsmiths/template makers out there to do so! It requires no changes to Clojure itself, very few changes to how you work, and you can leverage it right now. There are of course, other use cases (lambda/serverless, production servers, etc). The core team continues to evaluate a range of options on those.#2020-03-1219:22p-himik> If you are using a user.clj in dev, you need to force a reload because it has already been loaded automatically I'm not sure I get that. So it was loaded before I called compile. So what? If it wasn't changed, why would I want to reload it?#2020-03-1219:28Alex Miller (Clojure team)compiling is a side effect of loading. If it's already been loaded, compilation won't happen#2020-03-1219:45p-himikGotcha, thanks! Huh. Would it then make sense to be able to just dump an already loaded ns into a class file? Assuming that it's theoretically possible.#2020-03-1219:54dominicmIs this something you expect projects will setup themselves, or users?#2020-03-1219:55imreThank you Alex, this is something new I learned today. A sample project or more detailed guide where this technique is used on a large number of external dependencies could be even more helpful I believe especially for newer members of the community.#2020-03-1220:00p-himikJust created this gist with the code that I use in production. Don't use in development yet because I didn't set up any invalidation, and forgetting to recompile stuff when you changed some dependency can lead to some non-trivial errors. https://gist.github.com/p-himik/fcf638b05d70d908c74d98e25fd9e935#2020-03-1220:00Alex Miller (Clojure team)@U2FRKM4TW that partially already exists - normally as you load namespaces, they are compiled and added to the dynamic classloader (at a function level). But, on disk things are a little different to facilitate file-oriented loading. I think you'd end up basically redoing the same work, doesn't seem like it would help much to have this.#2020-03-1220:01p-himik@U064X3EF3 Hmm, I see. Could you please check out the comments in my gist linked above? Not sure if they have enough details, but maybe you have some ideas on how to deal with jars in general.#2020-03-1220:02Alex Miller (Clojure team)@U09LZR36F what do you mean by "projects"?#2020-03-1220:07imre@U064X3EF3 you're saying normally as you load namespaces, they are compiled and the guide article says compile ... compiles that namespace and all the namespaces it requires into *compile-path* - I wonder why 'normally' loading a namespace isn't doing that?#2020-03-1220:09imreI must be missing something obvious I feel#2020-03-1220:11Alex Miller (Clojure team)@U08BJGV6E example project https://github.com/puredanger/startup-time#2020-03-1220:12Alex Miller (Clojure team)normally loading a clojure namespace will compile the namespace into a bunch of classes and load those into the dynamic classloader#2020-03-1220:12Alex Miller (Clojure team)that all happens at runtime, dynamically#2020-03-1220:13Alex Miller (Clojure team)the process in this article describes how to save and reuse that work#2020-03-1220:14imreI see that, I was just wondering why the saving isn't happening automatically (provided that *compile-path* is on the classpath)? Thank you for the explanation and the example project!#2020-03-1220:16Alex Miller (Clojure team)because it's not always needed - while you're working on your project, you probably don't actually want this at all#2020-03-1220:16Alex Miller (Clojure team)for the namespaces in your own project#2020-03-1220:17p-himikHuh. Interesting. I'm getting
Syntax error (IOException) compiling fn* at (user.clj:1:1).
No such file or directory
when trying to compile the example project.
#2020-03-1220:21Alex Miller (Clojure team)mkdir classes#2020-03-1220:23imre24.75 -> 6.68 on my machine, that is a significant improvement!#2020-03-1220:25seancorfieldA minor nit: this line near the start has a smart quote in it, instead of a regular quote:
(compile ‘my.namespace)    ;; writes .class files to *compile-path*
#2020-03-1220:26p-himikCreating the dir did it. The error about fn* was especially unhelpful.#2020-03-1220:27seancorfieldOh, several of the code examples have those pesky smart quotes lower down too.#2020-03-1220:31Alex Miller (Clojure team)I’ll fix those, wish I could uninvent those#2020-03-1220:35dominicm@U064X3EF3 by project I mean something like tools.deps or the application I work on daily.#2020-03-1220:39jumarI'm not sure why but whenever I call compile on a ns, only that ns is compiled into classes directory - nses required by that ns are NOT compiled at all... I'm using leiningen.#2020-03-1220:41dominicmI think lein does magic for that.#2020-03-1220:43dominicmIt seems like this approach would go well with some caching information. Library incoming...#2020-03-1220:47dominicmNot sure about the classes issue above, but it it is git, this is normally solved by having a .gitkeep file inside it.#2020-03-1220:48Alex Miller (Clojure team)maybe we should move this to #tools-deps b/c none of what you're saying makes sense to me#2020-03-1220:52dominicm@U064X3EF3 sorry, not related to tools.deps at all. What I mean is, should something like core.cache be adding a dev/user.clj and compilation stuff? Or meander, oz, the lein-based project I work on daily, etc. Or should I, a developer, be setting this up for myself as a "personal workflow"?#2020-03-1220:53Alex Miller (Clojure team)I think the answer for libs is generally, no#2020-03-1220:54Alex Miller (Clojure team)user.clj is primarily used by people building applications (particularly common in web app templates, reloaded stuff, etc)#2020-03-1220:55Alex Miller (Clojure team)if you are doing dev on a project, and it has a lot of deps, you might want to consider this. for those libs you mention, that's probably not the case.#2020-03-1220:55dominicmI'm not suggesting libs would include this. Sorry, I'm not doing a good job. I mean for while you're developing those libraries.#2020-03-1220:56Alex Miller (Clojure team)there is no reason to add a user.clj if you don't already have one#2020-03-1220:56dominicmOkay. I think you've figured out what I mean now :).#2020-03-1220:56Alex Miller (Clojure team)it's called out explicitly because it's special, and common for applications#2020-03-1220:58dominicmBetter phrasing would perhaps be, I work on 3 projects in a week. Should I update all 3 of them. Or should I update ~/.clojure/deps.edn.#2020-03-1220:59Alex Miller (Clojure team)it depends#2020-03-1220:59Alex Miller (Clojure team)if the alias is identical, then sure, but I'm not sure if it would be#2020-03-1221:02dominicmWouldn't it be always extra paths classes? (Or maybe dominic_classes or something unique).#2020-03-1221:06Alex Miller (Clojure team)not if you put it in a different path#2020-03-1221:06Alex Miller (Clojure team)I can't answer these questions for you - they are dependent on your environment#2020-03-1221:09dominicmI'm trying to figure out what the best current practice is. What I need to get projects to do, or my colleagues :).#2020-03-1306:36ikitommi35sec -> 11sec.#2020-03-1313:07rickmoynihan@U064X3EF3: can you clarify why this might be a problem: https://clojurians.slack.com/archives/C06MAR553/p1584044181213700?thread_ts=1584038194.208900&amp;cid=C06MAR553#2020-03-1313:09Alex Miller (Clojure team)if you have files that you are actively changing all the time (b/c doing dev on them), aot compiling those namespaces is useless. but aot compiling your deps is still worthwhile#2020-03-1313:10rickmoynihansure; but wouldn’t it only do it if they had actually changed?#2020-03-1313:11rickmoynihanclojure is compiling anyway in memory when the repl evaluates; so why worry about putting those outputs on disk?#2020-03-1313:11Alex Miller (Clojure team)I don't understand what you're asking#2020-03-1313:18rickmoynihanSorry, you seemed to imply earlier that a user wouldn’t want their project namespaces to be compiled into classes/. I understand that because they’re changing frequently there’s no benefit to storing them. What I’m questioning though is whether there is a cost or problem if it is done. Otherwise it’s extra work for tooling to figure out which namespaces to pass to compile. Why do that work if doing so doesn’t cause people problems and is almost as quick?#2020-03-1313:19Alex Miller (Clojure team)I don't think there's a problem, just saying it's not giving you a benefit#2020-03-1313:19rickmoynihanOk cool. That’s all I wanted to clarify.#2020-03-1220:40rickmoynihanInteresting — I’d been meaning to look at what would be involved in doing something like this with some of our integrant systems which are essentially dynamically composed from configurations that are loaded through ig/load-namespaces. I’ll need to read this thoroughly to see if I can finally cobble something together. This is like we used to compile clojure code in the good old days! 😁#2020-03-1220:47kszaboI think you can do a simple algorithm like: 1. ig/load-namespaces 2. analyze deps.edn for paths that are pulled in by the current project 3. collect all ns’s loaded from those path’s sources 4. (apply compile (set/difference (all-ns) *1))#2020-03-1220:48seancorfieldPlease do not have conversations in the #announcements channel.#2020-03-1220:48seancorfieldOr stick to a single thread under the original announcement.#2020-03-1220:48rickmoynihanOops sorry sean — I thought this was a different channel!#2020-03-1309:40rickmoynihan@U08E8UGF7: That seems a lot more fiddly than what I was thinking. Won’t it be awkward to know what paths/aliases your repl was running with? I was thinking you’d just implement compile-namespaces… probably something like:
(defn compile-namespaces [config keys]
  (doall (->> (ig/dependent-keys config keys)
              (mapcat #(conj (ancestors %) %))
              (mapcat ig/key->namespaces)
              (distinct)
              (compile))))
#2020-03-1309:42kszaboThe whole point is to not compile the namespaces that you are working in on in the current project, since those will change frequently. You can’t determine where those integrant ns’es are coming from just from the config#2020-03-1309:43kszaboanyway, let’s move this to #integrant#2020-03-1309:45plexusWe've had several new releases of Kaocha, the flexible and friendly test runner, bugfix releases for kaocha-cljs and kaocha-boot, and the first release in a while for lambdaisland/uri. Details in the comments, follow-up #lambdaisland.#2020-03-1309:45plexuskaocha 0.0-601 - fixed: Namespaces where the ns form can not be read by tools.readers are now reported as a test failure, rather than being quietly ignored. kaocha 0.0-597 - added: Added support in the reporter for the =? macro as used in Expectations (thanks [@U11EL3P9U](https://github.com/dharrigan) 🎉) kaocha 0.0-590 - fixed: Fix support for dynamic bindings with set! in watch mode. (thanks [@frenchy64](https://github.com/frenchy64)) - fixed: Fixes support for :config hooks in the hooks plugin. kaocha 0.0-581 - changed: Breaking change! Focus/skip options are now applied in two passes, once for options in tests.edn, once for command-line/REPL options. The result is that command line options can only narrow the set of tests to be run. (thanks [@UB0EMUD34](https://github.com/otwieracz)) kaocha 0.0-573 - added: Added #meta-merge reader literal for tests.edn. (thanks [@RickyMoynihan](https://github.com/RickMoynihan)) kaocha-cljs 0.0-71 - fixed: Depend on an actual version of Glogi, instead or "RELEASE" kaocha-boot 0.0-20 - fixed: Inherit dependencies in Boot pod without modification (thanks [@U0JCBNKPZ](https://github.com/jffry)) uri 1.2.1 - changed: Remove dependencies on ClojureScript and data.json. - changed: Added type hints to avoid reflection (thanks @U05049FGA!) - added: lambdaisland.uri.normalize/normalize, for normalizing URI instances.#2020-03-1309:48plexusWe have several more things in the pipeline, more Kaocha improvements, a CLJC version of deep-diff, and the first releases of lambdaisland/regal, lambdaisland/edn-lines and lambdaisland/fetch. If our work is useful to you then please become a backer at http://opencollective.com/lambda-island 🙏:skin-tone-2: kaocha🎈 🎉#2020-03-1312:14slipsetArdoq is happy to announce https://github.com/ardoq/compojure-swagger It's basically a stripped down version of Metosins https://github.com/metosin/compojure-api which only purpose is to generate swagger documentation for your compojure-routes and specs I wouldn't suggest using this for green-field stuff because I'd probably choose another routing library like Metosins https://github.com/metosin/reitit or some other data based lib.#2020-03-1312:14borkdudeRelated, since you mentioned reitit. For green-field it might be interesting to consider: https://github.com/juxt/apex A swagger (now open-api) first solution built with reitit and ring#2020-03-1312:41otwieraczSo you might be also interested in https://github.com/otwieracz/liberator-swagger#2020-03-1313:13slipsetNice!#2020-03-1508:43oliyOr for pedestal https://github.com/oliyh/pedestal-api#2020-03-1410:17borkdudeanalyze-reify: a command line tool that analyzes clojure code for occurrences of reify and lists the reified interfaces. Implemented using Rust and tree-sitter. https://github.com/borkdude/analyze-reify.#2020-03-1621:30eccentric JFor my curiosity: What drew you to Rust for this project?#2020-03-1621:31borkdude@U8WFYMFRU Just learning something new#2020-03-1621:31borkdudeI guess you can also use treesitter from JS or Python#2020-03-1708:18g7saye-db: ClojureScript wrapper for IndexedDB https://github.com/g7s/aye-db#2020-03-1709:04solfThere seems to be an unused [promesa.core :as p] in the README example, or is it needed?#2020-03-1709:05g7sIt is there because I use it in the subsequent code snippets (such as the last with-tx example)#2020-03-1709:07g7sbut you are right it is a bit confusing. README needs a bit more work#2020-03-1817:00metasoarous@U1C36HC6N @UB95JRKM3 Is IndexDB supported yet for konserve? You might want to consider using that if it fits your use case @UKQS17P3L, as it would offer portability.#2020-03-1908:06kkuehneThanks @U05100J3V, I'll have a look.#2020-03-1908:34g7s@U05100J3V konserve AFAIK uses IDB as a backend to support get-in/assoc-in etc and does not provide any mechanism to allow transactions on operations between different object stores (which was my use case); but besides that I am not sure how one can, for example, change the key of a stored document atomically using konserve (maybe it can be done but I couldn't figure it out through their docs)#2020-03-1820:42Tamizhvendan SAnnouncing GraphQLize Alpha - an open-source Clojure(& JVM) library for developing GraphQL API instantly from your existing PostgreSQL and MySQL databases. https://www.graphqlize.org/blog/announcing-graphqlize-alpha#2020-03-1820:46hlshipI can't check your site until I get off our VPN, but looks like you are using Lacinia. I hope that was a pleasant experience!#2020-03-1820:57Tamizhvendan SYes, It is! Looking forward for your feedback 🙂#2020-03-1820:49phronmophobicIntroducing membrane: a platform agnostic library for building user interfaces with a focus on desktop apps. Membrane is currently in beta. Feedback is welcome. Code is on github, https://github.com/phronmophobic/membrane. Discussions in the #membrane channel.#2020-03-1915:33Eric ScottAnnouncing ont-app/IGraph: https://github.com/ont-app/igraph Here's a 15-minute video introduction: https://www.youtube.com/watch?v=BlH__4iNHZE&amp;feature=youtu.be#2020-03-1916:42rickmoynihanInteresting… Not sure if you’ve also seen: https://github.com/Swirrl/grafter and: https://github.com/Swirrl/matcha#2020-03-1916:43rickmoynihanIf you care to speak about this stuff btw there is also #rdf#2020-03-1916:45Eric ScottYes I'm definitely aware of the Grafter project, and hope I can write an integration with that in the future.#2020-03-1916:45Eric ScottI was not aware of the #rdf channel. Thanks!#2020-03-1917:41telekidReally incredible documentation, nice job#2020-03-2005:16tatutMIT licensed SVG icons as hiccup returning cljs functions for reagent use https://github.com/tatut/re-svg-icons#2020-03-2010:36borkdudeclj-kondo 1st birthday release! exactly one year ago the first commit in the clj-kondo repo was made. https://github.com/borkdude/clj-kondo/releases/tag/v2020.03.20 follow up in #clj-kondo#2020-03-2010:37imreWowzers! Doom Eternal, Animal Crossing, new Master Boot Record album and new clj-kondo on the same day?? NICE#2020-03-2011:03kszaboCongrats, it’s hard to quantify how much you streamlined the general Clojure development experience with this project. Rock on! metal#2020-03-2011:07pezHappy birthday, clj-kondo! Time flies,#2020-03-2011:08borkdudeIndeed, when you're having fun 🙂 Thanks y'all#2020-03-2011:12maxpThat is great! Thank you very much!#2020-03-2013:46blueberryClojureCUDA 0.9.1 released! Easily accelerate your programs on the GPU. Full speed. -Much less boilerplate than regular https://twitter.com/hashtag/CUDA?src=hashtag_click -INTERACTIVE CODING in the REPL https://t.co/lTAJmbrYL5?amp=1http://clojurecuda.uncomplicate.org#2020-03-2023:20borkdudebabashka v0.0.77: adds supports for transit, can now run the tolitius/cprop config lib, several other fixes and enhancements. The previous release added babashka.curl, a tiny wrapper around curl. https://github.com/borkdude/babashka/releases/tag/v0.0.77 follow up in #babashka.#2020-03-2116:53blueberryClojureCL 0.14.1 released! Easily accelerate your programs on the GPU and CPU. • Full speed. • Much less boilerplate than regular https://twitter.com/hashtag/OpenCL?src=hashtag_click • INTERACTIVE CODING in the REPL https://t.co/1NeGneaOeK?amp=1http://clojurecl.uncomplicate.org#2020-03-2210:41Ivan Fedorov[page-renderer "0.4.6"] released • Fixes an issue with bare root default url for service worker • Better docs for page-renderer.api namespace https://github.com/spacegangster/page-renderer#2020-03-2219:44blueberryNeanderthal 0.28.0 released! GPU and CPU accelerated matrix and linear algebra! + Full speed. + Faster than NumPy transparent! https://twitter.com/hashtag/CUDA?src=hashtag_click and https://twitter.com/hashtag/OpenCL?src=hashtag_click and Intel https://twitter.com/hashtag/MKL?src=hashtag_click INTERACTIVE CODING in the REPL + books & docs + https://twitter.com/hashtag/Clojure?src=hashtag_click https://twitter.com/hashtag/Java?src=hashtag_click https://twitter.com/hashtag/TensorFlow?src=hashtag_click https://twitter.com/hashtag/MachineLearning?src=hashtag_click https://t.co/YXjXJXaI2e?amp=1http://neanderthal.uncomplicate.org#2020-03-2409:13hkuptyI'm starting a new project for a binary serialization format. It does not intend to compete on producing the smallest binary or having the fastest algorithm, but rather reliably produce deterministic binaries, independently from implementation, language or runtime. If that has any real value to you, please consider giving feedback is it's still in alpha state 🙂 https://github.com/hkupty/debris#2020-03-2409:29mkvlrsounds similar to https://cbor.io#2020-03-2410:40hkuptyCBOR itself seems to have a different focus (data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation). That differs a bit from my original intent, but I got interested in the RFC 8152 /
CBOR Object Signing and Encryption
#2020-03-2414:12lukaszHow is it different from Avro?#2020-03-2415:48hkuptyThis is schemaless, we don't need to define a schema. It's analogue would be CBOR or MessagePack, but with strong guarantees on how to serialize collections.#2020-03-2416:30lukaszGotcha :thumbsup:#2020-03-2811:31Chris McCormick> reliably produce deterministic binaries 😍#2020-03-2417:21Tamizhvendan SIntroducing HoneyEQL - A Clojure library enables you to query the database using the EDN Query Language. https://github.com/graphqlize/honeyeql#2020-03-2420:40lilactownHelix is a library which provides a set of tools for doing idiomatic React development in ClojureScript. I just released 0.0.10! 🎉 https://clojurians.slack.com/archives/CRRJBCX7S/p1585082119215300#2020-03-2422:09oliyHi everyone, I'm pleased to announce the 0.1.3 release of https://github.com/oliyh/re-learn, a library for writing and displaying tutorials to your users on your reagent/re-frame application. This release changes: • When a tutorial is available it no longer starts automatically but instead displays a snackbar at the bottom of the screen indicating that a tutorial is available with options to accept or dismiss #17. The legacy behaviour is available by setting `:auto-accept? true` on the tutorial description. The aims of re-learn are: • Display "lessons" on the UI right next to the elements they describe • Define the lessons as data right next to the code that creates the elements • Support incremental introduction of new features to existing users • Work with UIs built with React and require no dom manipulation or special markup https://github.com/oliyh/re-learn#2020-03-2513:08wilkerlucio[com.wsscode/async "1.0.3"] is out! This version adds thread helpers to the Clojure side of the library. Thanks to @thenonameguy! https://github.com/wilkerlucio/wsscode-async#2020-03-2514:16plexuslambdaisland/glogi {:mvn/version "0.0-29"} is out. Glögi is a wrapper around goog.log that feels like pedestal.log. This release fixes an issue with advanced compilation. https://github.com/lambdaisland/glogi#2020-03-2515:20isakLooks cool. Have you considered adding spy? I found it to be one of the most useful things in pedestal log.#2020-03-2516:42plexusI have not since I have literally never used spy 🙂 but it looks useful, PR welcome. I added contribution instructions to the README#2020-03-2516:43plexusFollow-up release with a bugfix and some extra convenience, see CHANGELOG for details. I also added some more code samples to the README#2020-03-3012:46plexus@U08JKUHA9 I added spy and fixed a bug 🎉#2020-03-3013:53isak@U07FP7QJ0 nice! will check it out 👍:skin-tone-2:#2020-03-2516:34Jacob O'BryantJust finished: https://github.com/jacobobryant/mystery-cows#2020-03-2615:04dmillettI added "data shape" for flattening JSON/XML data to capture keypath/value frequencies https://github.com/dmillett/clash#2020-03-2716:34plexuslambdaisland/deep-diff2 {:mvn/version "2.0.0-72"} is out. deep-diff compares Clojure data structures, creating a pretty printed diff with -/+ markers and green/red highlighting. This major update is the first version with full cross-platform Clojure+ClojureScript support. For follow-up please use #lambdaisland.#2020-03-2716:36plexusThis port is the first thing we delivered with funding from our OpenCollective. We'll be doing a poll among our backers soon to see where we should put our priorities. http://opencollective.com/lambda-island#2020-03-2815:36bozhidarnREPL 0.7 is out https://metaredux.com/posts/2020/03/28/nrepl-0-7.html party-corgi#2020-03-2820:45viestiportkey-cloud/cfn-yaml 0.1.1 https://github.com/portkey-cloud/cfn-yaml, a small lib for reading CloudFormation YAML templates with intrinsic functions (i.e. !Sub 'Hello ${AWS::StackName}') into Clojure data structures and creating templates from Clojure data (e.g. (!Sub (str "${NamePrefix}-" "dev"))). Supports only limited amount of intrinsic functions, but if you find this useful, hack away more 🙂#2020-03-2822:37emil0rez-database 0.7.0 released after a long time in limbo. https://github.com/emil0r/ez-database#2020-03-2906:22uochanJust released vim-iced ver 1.3.0, Clojure Interactive Development Environment for Vim8/Neovim. Added support for sideloader of nREPL 0.7 ☺️ https://twitter.com/uochan/status/1244147534055890945#2020-03-2912:08plexusI put out two small Kaocha releases, [lambdaisland/kaocha "1.0-612"] and [lambdaisland/kaocha-cloverage "1.0-45"]. The main thing is that like the contrib libs we are bumping all new releases to 1.0.#2020-03-2912:11plexushttps://github.com/lambdaisland/kaocha/releases/tag/v1.0-612#2020-03-2912:11plexushttps://github.com/lambdaisland/kaocha-cloverage/releases/tag/v1.0-45#2020-03-3100:38blueberryNeanderthal 0.29.0 has just been released! The fast Clojure matrix and linear algebra library. https://neanderthal.uncomplicate.org#2020-03-3115:26dmillettClash update 1.5.1 "data shape" supports regex matching frequencies for values (int/text/decimale/etc) https://github.com/dmillett/clash#data-shape#2020-03-3119:34pezAnnouncing the http://Exercism.io is a generous and well thought through way to help bringing more and better programmers to the world, by facilitating their journeys with encouraging mentorship. As Clojurians we are extra concerned with the journey of someone picking up Clojure. The way Exercism works is labour intensive, albeit with high leverage. For someone attending the track it is a series of 1:1 mentorships, focused bursts of personal development. We (some concerned Clojure land citizens) think it is important that we can find and keep a sustainable way to provide delightful and productive onboarding for newcomers to Clojure, as well as for people already familiar, and considering taking a deep dive. Therefore we invite you to join the newly created #exercism channel: A place where  Personally I belong to the latter group mentioned there. Clojure has grown on me, and inch by inch, it, and you all in this community, have nudged me to a decision to switch careers, to really go for programming. That insight happened to find me in full about the same time as I got aware about Exercism. I don't know how to put words on how well it has suited me. My mentors helped me grok crucial aspects of Clojure, aspects that my imperative infested mind had problems letting in. I am not where I feel I can mentor others at the level Excerism calls for. But I hope to get there, and I hope to encourage all of you out there, who I know would be great mentors, to join the #exercism channel and to consider taking up mentorship.#2020-03-3121:08Alex Miller (Clojure team)core.async 1.1.582 is now available (mainly cljs changes) • Bumped deps - clojure 1.9, clojurescript 1.10.1.597, cljsbuild 1.1.7, tools.analyzer.jvm 1.0.0 • https://clojure.atlassian.net/browse/ASYNC-165 (CLJS) Fix inlining of let binding - thanks Kevin Downey! • https://clojure.atlassian.net/browse/ASYNC-184 (CLJS) Port CLJ exception handling fixes - thanks Kevin Downey! • https://clojure.atlassian.net/browse/ASYNC-228 (CLJS) Fix skip list for CLJS timers - thanks Daniel Sutton! • https://clojure.atlassian.net/browse/ASYNC-96 (CLJS) Fix full checking in fixed buffer - thanks Nguyen Tuan Anh! • https://clojure.atlassian.net/browse/ASYNC-230 (CLJS) Add js/Promise interop via core.async.interop - thanks Filipe Silva!#2020-04-0113:08rutledgepaulvAnnouncing defcash, a wee library providing defn syntax with core.memoize behaviors controlled via metadata. https://github.com/RutledgePaulV/defcash#2020-04-0114:25Alex Miller (Clojure team)core.async 1.1.587 is now available - adds missing :require-macros to the new promise interop, which is now doc'ed here https://clojurescript.org/guides/promise-interop#2020-04-0114:57AudriusI wrote a program that lets users use gamepads as mouse and keyboard. By using combinations of analogs and buttons. https://diode.zone/videos/watch/412c188c-e427-4e8c-9cbc-0a787c904b3e#2020-04-0115:06val_waeselynckSpec 3 is available spec.alpha3 3.1.4159 is available: https://tinyurl.com/yaub4qwm Spec 3 is a complete revamp of Clojure Spec, pushing to their completion and beyond the ideas hinted at by Spec 2, relating them to a body of early 2000s CS research. Although these evolutions involve minor changes to Clojure's syntax itself, these inconveniences are insignificant compared to the resulting usability and applicability of Spec. Although the core team has as yet played no part in this work, I have no doubt that they will see the light and follow it to the destination where Rich Hickey's intuition would have surely though windingly led. It goes without saying that a significant part of the credit still goes to them, therefore I will be content with being listed as the leading contributor, as well as being given the final keynote spot at the next Conj (which will be held virtually as you might expect). Follow-up discussion in #clojure-spec or threaded comments.#2020-04-0115:07acronI'm confused. This has no input from the core team?#2020-04-0115:08acronThe link goes to https://www.w3.org/standards/xml/schema#2020-04-0115:08lilactownit’s an April Fools joke#2020-04-0115:08acron🙈
#2020-04-0115:08val_waeselynckeval (java.util.Date.)#2020-04-0115:09acrongot me#2020-04-0115:13pez3.1.4159 😃#2020-04-0115:26henrikWill be released with Clojure 2.0.#2020-04-0115:27bherrmanndoh!#2020-04-0115:29borkdudeIt wouldn't surprise me if JUXT forked Clojure and replaced spec3 with spec-json-schema3.#2020-04-0115:46jaihindhreddyYou could have used spec 4.2 (throwback to Rich's Spec-ulation) 😛#2020-04-0115:57Alex Miller (Clojure team)lgtm#2020-04-0121:29penryusee also: spec.beta#2020-04-0121:30penryu> I have no doubt that they will see the light 😄#2020-04-0122:26andy.fingerhutWow, this has really gone viral.#2020-04-0200:39Alex Miller (Clojure team)just make sure it's 1.0#2020-04-0122:15mauricio.szaboJust published Chlorine v0.5.0. Chlorine is, and it will always be, a package for Atom that connects to a Socket REPL. But, this version also adds support for nREPL. The reason is simple: it was not hard to add support for nREPL, and by doing it it removes a lot of friction of new users that come from lein, for example. It also adds a little support for HyREPL and Ogion (Racket implementation of nREPL). Discussions on #chlorine 🙂#2020-04-0216:53Rafael LealAnnouncing k8s-api, a data-oriented client to Kubernetes API inspired by https://cognitect-labs/aws-api https://github.com/nubank/k8s-api#2020-04-0303:00tony.kayFulcro 3.2.0 is on Clojars. This release has a major improvement (in speed and behavior) to DOM inputs. I found a simplification that is Fulcro-specific that lets you write Fulcro transactions in a way that causes synchronous updates to component props (through an internal setState) so that Form inputs work correctly without wrapping them in things like internal buffering and cursor control logic (a well-known problem in async React wrappers). This leads to much more consistent (and fast) form behavior, and also makes the integration of vanilla js react components trivial! The best thing about it is all you have to do is add an extra ! to your code: (transact!! this …), and it is completely optional and bw compatible. So porting is a breeze (and optional). https://github.com/fulcrologic/fulcro#2020-04-0303:52tony.kayI’ve also released a new (ALPHA) version of the Fulcro RAD libraries (RAD, Datomic db adapter, and SQL db adapter) along with an updated demo. Fulcro Rapid Application Development (RAD) is a set of libraries that are intended to make it very fast to stand up a full-stack web application with database, network API, and SPA front-end, all while being able to quickly escape to your own code when RAD isn’t up to your task. This is not an API-stable release, but it is showing the promise of RAD. This release adds HTML5 routing, several report enhancements (row actions, report actions, column links, form links, visibility and enabled support for actions), form improvements (nicer looking read only forms), and more. See and try the demo at https://github.com/fulcrologic/fulcro-rad-demo NOTE: The db adapters are young. SQL adapter is less capable than the Datomic one, so I suggest playing with Datomic.#2020-04-0308:52danielcomptonClojurists Together is funding four projects $9,000 USD over three months. Apply at https://www.clojuriststogether.org/open-source/ and see more info on what our members are looking for at https://www.clojuriststogether.org/news/q2-2020-survey-results/#2020-04-0310:50CrispinSpire 0.1.0-alpha.3 released https://github.com/epiccastle/spire/releases/tag/v0.1.0-alpha.3 - sudo support - ssh connection debugging#2020-04-0414:41borkdudebb, a native fast-starting Clojure scripting environment, v0.0.79 adds an nREPL server for development and more! https://github.com/borkdude/babashka/releases/tag/v0.0.79 follow up in #babashka#2020-04-0416:57Tamizhvendan SGraphQLize Update (#1) - Adds pagination and Scalar Types. https://www.graphqlize.org/blog/graphqlize-update-1#2020-04-0512:02borkdudeclj-kondo v2020.04.05: - warn about conflicting alias - optional warn on usage of get-in, assoc-in etc. with single keys and other stuff! https://github.com/borkdude/clj-kondo/releases/tag/v2020.04.05 follow up in #clj-kondo#2020-04-0518:50CandidJoker v0.15.1 https://github.com/candid82/joker/releases/tag/v0.15.1#2020-04-0523:25mike_ananevEarly alpha release for simple system state management. https://github.com/redstarssystems/context#2020-04-0602:34wilkerlucio[com.wsscode/async "1.0.4"] is out! This release adds deftest-async helper on the clojure side, so you can write portable async tests in cljc. Also adds a new namespace with some queue processing helpers! README updated with docs on the new functionality, check it out at https://github.com/wilkerlucio/wsscode-async!#2020-04-0710:28katox[neanderthal-stick "0.2.0] is out! This is an update release that supports the lastest release of Neanderthal 0.29. Note: the release is backward compatible. You can safely load all your previously saved models. Check it out at https://github.com/katox/neanderthal-stick#2020-04-0803:28CandidJoker v0.15.3 https://github.com/candid82/joker/releases/tag/v0.15.3 (fixes a bug that causes bash to misbehave when exiting from repl with (exit), also enables bash-like tab completion in repl)#2020-04-0810:40kelvedenIt has been out for a while now and is something we've been using in production for some time but we've never really pushed it in the community much. But in the hope that it proves useful to folks: https://github.com/ovotech/ring-jwt.#2020-04-0817:50Jakub Holý (HolyJak)Just the thing I was about to start looking for :)#2020-04-0820:46kelvedenWe've also just released https://github.com/ovotech/duct.middleware.ring-jwt with wrappers for Integrant and Duct.#2020-04-0815:07chrisnhttp://tech.ml.dataset is now at beta version 2.0. It is a dataframe-like library and now includes supports for joins and the majority of the java.time datetime api. Column types are autodetected from data in most cases and can overridden in multiple ways. Once loaded you have the full power of the tech.datatype library to transform and clean data into whatever format you wish. It is also very easy to take this data and apply some simple linear regression and categorical inference on it (predict one column from a set of other columns). Some features: * Joins work in index space making them subsecond for even very large datasets. * Full datetime support including a set of 'packed' date time datatypes that are stored as 32 or 64 bit integers but can be operated on and print like their date time analogues. * Support for reading tsv, csv, xlsx, xls, and gzipped varieties of those. * Support for writing tsv, csv, and gzipped varieties of those. * Strings are loaded into variable width string tables so if for instance you have a categorical variable with 5 categories each entry will be stored in a byte. * Column datatype autodetection with a clear system for overriding and specifying the desired column types. * Memory efficient - data is stored in primitive arrays, dates are packed, and strings are stored in string tables. This means you can work with data many times larger in than before and stay in Clojure. It also means that sorting, group-by, filtering, and joining a table by a column is extremely fast. All of these operations are done in index space so they are both fast and if they result in an expansion of the datatset then you only pay for the indexes required but not the duplication of the data. https://github.com/techascent/tech.ml.dataset#2020-04-0822:13bringeCalva now has a debugger! It utilizes cider-nrepl and VS Code’s debugger extension API. This work has been done as part of the Clojurists Together Q1 2020 funding period. Many thanks to them for allowing us the time to focus on adding this feature, and many thanks to the cider-nrepl creators and maintainers for providing great foundational functionality for Clojure tooling. Features: * Set breakpoints with #break * Instrument functions with #dbg * Continue to next breakpoint * Evaluate code in the debug context * See variable values in the debugger side pane Upcoming Features: * Step over form * Step into form * Step out of form * See structured variables in the debugger side pane (currently maps and collections are just shown as strings) See the ClojureVerse post here: https://clojureverse.org/t/calva-gets-a-debugger/5751 See the documentation here: https://calva.io/debugger/#2020-04-0911:49Tamizhvendan SHoneyEQL (https://github.com/graphqlize/honeyeql) - New release supports data type coercion and MySQL’s boolean column type.#2020-04-1014:03bozhidarHere’s a bunch of nREPL-related announcements bundled together https://metaredux.com/posts/2020/04/10/a-cornucopia-of-nrepl-updates.html Enjoy!#2020-04-1022:44tony.kayFulcro 3.2.1-RC1 is on clojars. This is primarily a bugfix release: • Fixes issues where nested transactions miss render frames • Fixes react children when using React Hooks • Adds synchronous support to UISM as trigger!! • Fixes problems in headless operation (e.g.doing things like loads before mounting the app) This is an RC because the first fix required some internal work on tx processing, which is a highly critical code path. I do not expect any breakage. https://github.com/fulcrologic/fulcro#2020-04-1101:41mauricio.szaboAnnouncing Chlorine 5.2, Socket-REPL (and nREPL ❤️) package for the Atom editor. In this version, a fix for GOTO Var Definition on Windows, a better "Load File", and an even faster nREPL!#2020-04-1108:25petterClojureranker 1.0. Hi, nice to meet you all! Code to embed Clojure in Solr and to use functions for calculating the scores in the Solr result list: https://github.com/pegesund/clojureranker#2020-04-1110:05Tamizhvendan SHoneyEQL - 0.1.0-alpha9 adds support for sorting. https://github.com/graphqlize/honeyeql#2020-04-1215:37Tamizhvendan SLatest version of GraphQLize supports sorting of query results. https://www.graphqlize.org/docs/queries/sorting-query-results#2020-04-1321:12bedersHere's a very silly reagent component: Rough-cljs which makes diagrams with a hand-drawn look! It's a simple wrapper and I did it mostly out of a desire to learn more about CLJS, Reagent and Shadow-cljs and the whole process of actually getting something out there. It's my first contribution to the CLJS open source community, so I'm happy for any feedback. https://rough-cljs.netlify.com/#2020-04-1322:47metasoarousVery cool! Nice work 🙂 You might want to consider renaming the component to rough from Rough; The latter is conventional with vanilla JS react components, while the former is generally considered more idiomatic with cljs/Reagent. As you like though. Either way, thanks for releasing this!#2020-04-1322:57bedersthanks for the feedback, I had no idea about the convention. I name all my functions that are used in hiccup that way though. Will add an alias#2020-04-1400:02blueberryhttps://twitter.com/uncomplicateorg/status/1249850297301770240#2020-04-1402:10pfeodrippeReleased Arrudeia, a simple scheduling library to test your concurrent code and thoughts https://github.com/pfeodrippe/arrudeia#2020-04-1412:15slipsetorg.flatland/ordered has a new release. Main change is that it is now no longer dependent on org.flatland/useful which makes the dependency tree much smaller. https://clojars.org/org.flatland/ordered#2020-04-1522:46vemvthis is super nice. some months ago I considered ordered and discarded it precisely b/c of the dep.#2020-04-1606:08slipsetHappy to hear that!#2020-04-1412:16slipsetclj-commons/clj-yaml has a new release. Main change is an upgrade of org.flatland/ordered (as mentioned above) which makes the dependency tree much smaller. Thanks to @borkdude for pushing these changes (and with help in resolving problems when they arose) https://clojars.org/clj-commons/clj-yaml#2020-04-1416:32mike_ananevA new release of context library is out! https://github.com/redstarssystems/context#2020-04-1511:06borkdudebabashka v0.0.80-v0.0.85: https://github.com/borkdude/babashka/releases - add clj-commons/clj-yaml library - support :use and :refer :all for compatibility with JVM Clojure - babashka.curl now parses headers and returns {:body ... :headers ... :status ...} follow up in #babashka#2020-04-1511:51roman01laRum release candidate with a bunch of fixes and new stuff https://github.com/tonsky/rum/blob/gh-pages/CHANGELOG.md#0115-snapshot Please give it a try on your projects and report any issues in the repo 0.11.5-SNAPSHOT#2020-04-1518:09blueberryhttps://twitter.com/uncomplicateorg/status/1250485561070178304#2020-04-1601:24bringeCalva's new debugger gets more features in v2.0.92! https://github.com/BetterThanTomorrow/calva • Step over, step into, and step out • Annotations to show debug values in the editor See the docs (which also have a new look) for details: https://calva.io/debugger/ Join us in #calva to ask questions or discuss.#2020-04-1717:50Crispinspire 0.1.0-alpha.4 released https://github.com/epiccastle/spire/releases/tag/v0.1.0-alpha.4 - :event printing output module - curl module - mkdir module - attrs module - rm module - source file relative directory for selmer template file paths - #30 - uploading with :context and progress bar causes Divide by zero - #29 - System/getenv reflection fix - selmer file path now relative to executing clj file#2020-04-1816:23Tamizhvendan SThe latest release of HoneyEQL supports filtering https://github.com/graphqlize/honeyeql#2020-04-1816:48Reily Siegelhttps://github.com/ReilySiegel/clojure-sheets#2020-04-1817:52dpsuttonyou've used dashes in the folder name rather than underscores it seems#2020-04-1818:13dpsuttonPR sent#2020-04-1818:17Reily SiegelI dont know how I missed that... PR merged, thank you!#2020-04-1819:14dpsuttoni'm digging the lib. thanks!#2020-04-1819:29Adam Helins"Void" release 1.0.0, a small library exclusively centered on nil : https://github.com/dvlopt/void#2020-04-1819:46pezIf you haven't read, I can recommend: https://www.amazon.com/Book-Nothing-Vacuums-Origins-Universe/dp/0375726098#2020-04-1820:12Lennart BuitThat no-op function had me chuckle: This function does absolutely nothing, but at least its efficient about it.#2020-04-1902:37souenzzo(void/assoc {:a 1} :a nil) will remove :a 1 ?#2020-04-1906:16Adam HelinsNo, it simply does not assoc it. For what you want there is assoc-strict which does exactly that.#2020-04-1912:08slipsetWe have assoc-some and update-some at work. #2020-04-1917:18Adam HelinsThat kind of fns are often needed I find, at least to write less defensive code, that is why they are gathered in this small lib. Plus, fns such as dissoc-in which recursively dissoc empty maps in the path would be tiring to rewrite everytime.#2020-04-2214:55robert-stuttafordis the large amount of whitespace in the source some sort of joke about emptyness aka nothing? 😆#2020-04-2314:29Noah BogartYeah, the whitespace is a style I've never seen before. Any particular reasons?#2020-04-2314:29Noah BogartThe library is very very cool. I'm gonna have to use this#2020-04-2411:08Adam HelinsOh, a peculiarity of mine I am afraid 😄 I assume people bothered by that will use cljfmt if needed 😉#2020-04-1904:36Reily SiegelSHA 8e933385b6bda78e147d427c04fb528fd803a3ea Adds ClojureScript support and Google Sheets backend based on clojure-sheets. https://github.com/ReilySiegel/EQLizr#2020-04-1915:03Tamizhvendan SGraphQLize now supports Filtering - https://www.graphqlize.org/docs/queries/filtering-query-results#2020-04-1918:51dpsuttonAnnouncing inf-clojure 3.0.0-snapshot on melpa. - Revamps the internals of inf-clojure. - Makes startup, and choosing a supported repl easier and more intuitive. - (use-package inf-clojure) (add-hook 'clojure-mode #'inf-clojure-minor-mode) and then M-x inf-clojure - supported clojure, lumo, planck, and joker repls. Now extended to support cljs and babashka Followup in #emacs#2020-04-2001:25didibusAnnouncing the first release of Anakondo! An Emacs Clojure[Script] minor mode powered by clj-kondo. It lets you have auto-complete of Clojure buffers even without a connected REPL! https://github.com/didibus/anakondo#2020-04-2010:22slipsetThis is quite interesting, but more than completion, what I'm really in need of is find-usages. basically the inverse of https://github.com/borkdude/carve#2020-04-2010:22slipsetNow, if this could be made recursive as well, so one could click up the usage-tree of a fn...#2020-04-2010:50viestitried it and just drooling over what more could be done with this approach 🙂#2020-04-2017:17didibus@U04V5VAUN I have that in the roadmap. Should be doable. From clj-kondo, I get the list of all Vars defined in the entire project with the filename, row and col they are in. So I think it's just about hooking it up to Emacs.#2020-04-2022:24eccentric JAttempted to create a spacemacs layer to make it easier for users to setup. https://github.com/eccentric-j/anakondo-layer.#2020-04-2017:21pfeodrippeArrudeia new release v0.1.0-0.7.0 https://github.com/pfeodrippe/arrudeia • Compute valid interleavings as data, then you can use them at tests • Added #ar/->* tagged literal so you can put it directly above a form (defn-like forms) • Create macros for your thread-first macro (e.g. for cats.core/->=, you can do (thread-first-macro-builder "m->=" 'cats.core/->=) and you would have a m->= macro ready to be used and compatible with Arrudeia, a ...-reader function also is created to be used with your own custom tagged literal) • Do @t1 on your created process so it runs until completion • Added ARRUDEIA_DISABLE_MACROS, you should use it to tell Arrudeia to not generate its macro code and create "normal" code instead#2020-04-2017:41Tamizhvendan SGraphQLize Update (#2) - Supports Sorting, Filtering & MySQL Boolean Types https://www.graphqlize.org/blog/graphqlize-update-2#2020-04-2017:56seancorfieldYou might want to dial back the number of announcements you're making about this project in this channel. We encourage folks to only announce major new functionality and to try to only have one or maybe two announcements about the same library in the scrollable history of this channel (which currently goes back to April 9th -- ten or eleven days). Between this project and HoneyEQL you have six announcements in the history.#2020-04-2104:44Tamizhvendan SSorry about that, I wasn’t aware of it. Let me limit it to those updates that matter.#2020-04-2213:53borkdudeWrote a script to turn a directory of .mp3 files (think: a downloaded Clojure conference Youtube playlist as .mp3 audio tracks!) into a podcast. https://github.com/borkdude/generate-podcast#2020-04-2214:00includecool :)#2020-04-2309:11hkuptyJust pushed a tooling helper for building proto files from tools.deps : https://github.com/hkupty/defteron.builder Hopefully that's helpful to someone 🙂#2020-04-2310:54katoxI pushed a new maintenance release of neanderthal-stick updated to Neanderthal 0.31: https://github.com/katox/neanderthal-stick#2020-04-2311:48luposlipMy JSON Schema library can now (naively) generate JSON Schemas, as well as use them (or other JSON Schemas) for EDN/JSON data validation: https://github.com/luposlip/json-schema#2020-04-2404:12Chris McCormickFleck (Clojure-like LISP) v0.1.0 is out. https://github.com/chr15m/flk Changes: • (sh! 'echo ["hello world!"]) = better interop returning stdout, stderr, return code. • (str-pos haystack needle) returning the position of haystack within needle.#2020-04-2404:20Cameron\>:) its a clojure-lisp heyday#2020-04-2408:30Ahmed HassanHow does it compare with Closh and Oil Shell?#2020-04-2408:41Chris McCormicki don't know oil shell so i can't speak to that. some differences from closh: • closh is implemented in real clojure[script] on the JVM or node, whereas flk is a hack on top of bash (the only dependency is bash 4). • closh is an actual shell whereas this is intended to make scripting nicer where you only have bash available, rather than using it as your every day shell.#2020-04-2408:42Chris McCormickprojects like babashka and closh are significantly more powerful and complete because they are built with real clojure.#2020-04-2408:43Chris McCormickwhat i think makes flk useful in certain niches is that it runs on top of bash alone and can compile to a pure bash script. so if bash is all you have got available on the platform you are targeting, and you just want to write some small scripts using a clojure-like syntax, then this might be useful.#2020-04-2718:24eggsyntaxThis looks like a terrific fit for that niche! Also parts of the FAQ really cracked me up 😂#2020-04-2414:28borkdudebabashka, a native tool for Clojure scripting, v0.0.85-v0.0.89: Add clojure.data.xml, support for next.jdbc + postgres and more https://github.com/borkdude/babashka/releases follow up in #babashka 🎉 happy weekend!#2020-04-2515:32lispycloudsclj-docker-client the idiomatic, data driven docker client is hitting 1.0.0 soon !! Released 1.0.0-RC1 now: https://github.com/into-docker/clj-docker-client Please try it out and would be happy to fix any final issues! 1.0.0 here we come! 🎉 🎉 Follow up in #docker#2020-04-2516:16pfeodrippeTLA+ (TLC) <-> EDN v0.1.0 library converter is out. Check it out if you are interested in formal methods and would like to use it for TLC overrides o/ https://github.com/pfeodrippe/tla-edn#2020-04-2605:49wilkerlucioHello everybody! Today I have a couple of exciting news! First the release of the Pathom Viz electron app! This is a stand-alone application to give tooling support for developers using Pathom on their applications. This app includes: Query Runner - This provides a query runner with auto-complete support and query history. - Provides tracing feature to debug queries - A new visualisation to support the improved query planner, still experimental, but with great capabilities to Index Explorer - A tool to allow navigation in the the web of the connect index of your parser. Requests (currently cljs parsers only) - Captures queries running in your parser so you can inspect a debug as they from your application. This allows you to connect in Pathom parsers defined both in Clojure or ClojureScript. You can download the client at: https://github.com/wilkerlucio/pathom-viz/releases/tag/v1.1.0 For more information check the docs at https://roamresearch.com/#/app/wsscode/page/RG9C93Sip Hope you enjoy this release, cheers!#2020-04-2608:37wilkerlucioI published for all platforms, but I only have a Mac to test, so confirmation if Linux and Windows builds are working properly will be very welcome 🙏#2020-04-2617:37souenzzoWindows build looks OK 🙂#2020-04-2613:43tatutI've been working with the latest cljs and imagining a brand new react wrapper for hook based use https://github.com/tatut/koukku#2020-04-2614:37roman01laRum 0.11.5 is available now. More info in release notes https://gist.github.com/roman01la/b1888bedbafd328169e26c66dde5fd56#2020-04-2615:43AndrosHi, after a few months working I wanted to share with you my project: a Disqus clone API to be independent in Clojure. Also, a system to migrate the comments: Glosa#2020-04-2615:43Androshttps://github.com/glosa/glosa-server#2020-04-2615:44Androshttps://github.com/glosa/#2020-04-2616:29athomasoriginalUpdated figwheel, reagent and clj-new to latest in my little create-reagent-app cli template. This is a low opinion template that just gets you on the right track early in the development process. https://github.com/athomasoriginal/create-reagent-app#2020-04-2616:55Crispinspire 0.1.0-alpha.6 released https://github.com/epiccastle/spire/releases/tag/v0.1.0-alpha.6 - implement external code loading via require or load-file - #25 - Fix hanging or breaking file upload when using multibyte unicode :content - #38 - Make upload file :src path relative to executing script's folder - #39#2020-04-2811:10Busy escaping the comfort zoneHi fellow Clojurians just wanted to share a short post I wrote about how I use Clara rules for flow automation http://narkisr.com/posts/27-04-2020-clara-flow/ in https://github.com/re-ops/re-core#2020-04-2815:40Jakub Holý (HolyJak)Better place is #news-and-articles#2020-04-2908:52Busy escaping the comfort zoneCool had no idea that channel existed ill use that one next time, thanks for heads up#2020-04-2816:02Adam HelinsA new Clojure/script library for automatically serializing functions and impossible things like infinite sequences : https://github.com/dvlopt/fdat.cljc The idea is pretty simple, but it was really tricky to reach a solution that would work with different serializers (currently Nippy and Transit), both in Clojure and Clojurescript. For my work, this is extremely useful. Way more convenient than, for instance, serializing vectors like [:my-fn-or-event 1 2 :argument] that we have to curate and handle ourselves. Here, we just use functions as functions, and given a minimum of intrusion, those functions are automatically serializable. Please, let me know if the README is clear enough and if you find the whole idea interesting ;)#2020-04-2817:33eccentric JCan you add an example of the serialized output to the README?#2020-04-2818:14jaihindhreddyIn the first code snippet in this section: https://github.com/dvlopt/fdat.cljc#automatically-annotating-imetas-using-the--macro Is 'user/range-range a typo for 'user/random-range?#2020-04-2818:20jaihindhreddyAlso, typos s/explicitely/explicitly/ s/destructing/destructuring/ s/counterintuive/counterintuitive/ s/medata/metadata/#2020-04-2819:23Adam Helins@U883WCP5Z Thanks, too much typing for the day! @U8WFYMFRU, the output is whatever the chosen serializer uses. If you use Nippy with the Nippy plugin, you will get a byte-array. I don't know if that helps?#2020-04-2819:38eccentric JOh! I was under the impression that it returns strings but I guess I’m not familiar enough with the problem space.#2020-04-2819:52Adam HelinsThat's the thing, the core API does not do the serialization itself, it provides utilities for existing ones. It is a bit hard to explain if you don't use that sort of things (nippy or transit).#2020-04-2820:25oliyMartian, the http abstraction library 0.1.12 release https://github.com/oliyh/martian This release adds support for: • Path parameters https://github.com/oliyh/martian/pull/75 (thanks https://github.com/RafaeLeal) • Route definition spec https://github.com/oliyh/martian/pull/78 (turn on spec instrumentation to use it) • clj-http-lite module https://github.com/oliyh/martian/pull/81 (thanks https://github.com/deas) This release improves: • Handling of additionalProperties https://github.com/oliyh/martian/pull/76 (thanks https://github.com/RafaeLeal) • Handling of open maps https://github.com/oliyh/martian/pull/77 (thanks https://github.com/RafaeLeal) • Remove implicit `martian-httpkit` dependency from `martian-test` https://github.com/oliyh/martian/pull/82 (thanks https://github.com/davidjameshumphreys)#2020-04-2903:00didibusAnakondo v0.2 https://github.com/didibus/anakondo An Emacs minor mode for Clojure[Script] completion without needing a connected REPL: * Now in MELPA * Now with Locals completion and Java completion#2020-04-2905:17sogaiuwas able to get locals and java completion working successfully. nice!#2020-04-2905:17sogaiuone small thing, somehow my installation of emacs (or config?) doesn't have concatenate for some reason. renaming that to cl-concatenate seemed to make things work. any ideas what might be wrong with my setup?#2020-04-2910:50practicalli-johnI added anakondo to Spacemacs and it seems to be working well. Will do some more testing as I code today.#2020-04-2914:06borkdudeI installed anakondo, but when I enter a random Clojure file in /tmp it asks me to which project I want to switch...#2020-04-2914:06borkdude#2020-04-2914:06borkdudeand no matter which one I choose it keeps asking me#2020-04-2915:35practicalli-johnI think it is tied to projectile by design (at least for the moment) as it used that to access the specific deps.edn file and build up the path.#2020-04-2915:38borkdudeI think it would be useful to make this opt-in. clj-kondo can also just lint one file without any context. this will be useful for babashka scripts which I want to use it for, because I don't spin up a REPL for that all the time. cc @U0K064KQV#2020-04-2915:39practicalli-johnThe problem I have is that I use layouts and if I restart Emacs then a dozen Clojure projects are reopened and analysed, which takes nearly a minute and I cannot do anything until the analysis has finished. anakondo works well when loaded, so keen to see how this evolves.#2020-04-2915:40borkdudeI think the project scanning should be optional, it seems your problem is more or less the same as mine, only from a different angle#2020-04-2915:52practicalli-johnHaving an option to make scanning optional would be useful, I agree. I did raise an issue suggesting running the static analysis in the background, although unsure if that is possible with Emacs.#2020-04-2916:07didibus@UG1C3AD5Z Ah, I still haven't figured how to know what I need to explicitly require and not. The functions included with Emacs don't tell you where they come from when you look up their docs which is what makes it hard. I think I need to require 'cl explicitly here. Thanks for the feedback.#2020-04-2916:12didibus@U04V15CAJ Hum, that's interesting. I think I know why this doesn't happen to me. I think since my home is a git project, projectile defaults to that when I'm "outside" a project. I assumed that was just the projectile default behavior. I'll work on a fix. Thanks for trying it out and reporting back#2020-04-2916:16didibus@U05254DQM Ah yes, I can see this being annoying. I have planned to make analysis async as my next big feature. But your use case might need something else, even analysing everything asynchronously when you start Emacs seems wasteful. I had wondered if I should have a file cache so it persists between mode restarts. That could be an option. Otherwise for now, you might want to manually turn on/off the mode#2020-04-2916:26practicalli-johnAh, I can just comment out the autoload and the add-hooks code and using SPC SPC anakondo-minor-mode and it seems to work. That will allow me to continue testing. Thanks.#2020-04-2916:27didibusYou should only need to comment out the add-hooks I believe.#2020-04-2916:28didibusI think autoload is needed to load the anakondo-minor-mode command.#2020-04-2916:28didibusBut I'm still figuring out all the mysteries of Emacs autoload#2020-05-0300:27didibus@U04V15CAJ I can do two things, I can either default the project to the current file's folder, or I can default it to nil, so I'll just analyze the buffer and nothing else#2020-05-0300:27didibusWhich one would you think be best? I'm leaning on defaulting to the folder.#2020-05-0306:03didibus@UG1C3AD5Z @U04V15CAJ Ok latest Melpa release should have fixed your issues.#2020-05-0306:07sogaiuthanks! will give it a try#2020-05-0306:46borkdude@U0K064KQV if I’m editing a Clojure file in /tmp, will it analyze my entire tmp folder? That doesn’t seem to be a good idea. Why don’t you piggie back on the detection of the .clj-kondo directory and else default to single file#2020-05-0314:04borkdudeOr: detect $PROJECT_ROOT by looking at .clj-kondo, .git or project.cj or deps.edn and if all that fails, only lint the current buffer?#2020-05-0314:04borkdudeThat would work for my /tmp/foo.clj scripts#2020-05-0400:19didibusYa, it will analyze all of /tmp in that case. I guess its a trade off. If someone has a set of clojure files or babashka in some folder that they load-file together, then it be nice to have that default as the project folder, but in the case of a tmp file or an empty buffer I guess it would make more sense to default it to no project and only analyze the buffer#2020-05-0400:19didibusThe way I have it right now, it defaults to the buffer's default-directory#2020-05-0400:20didibusWhich is something the user can change. Though I think it would fail it you'd set it to nil#2020-05-0400:20didibusI'll hammock over it a bit#2020-05-0408:36practicalli-johnThinking it would be useful to exclude files types or specific directories. I have one project that takes over 40 seconds to analyze. It only has a few libs and not that much code, but has large data files. I assuming this is why it's slow. I'll raise an issue and share the code later today#2020-05-0409:19didibusSure thing. That said, all transitive dependencies also get analysed for both Java and Clojure. So if you have a big dependency tree, that could also be the cause.#2020-04-2918:18bringehttps://github.com/BetterThanTomorrow/calva v2.0.96 comes with additional features to the new debugger: • Command for instrumenting functions for debugging • Editor decorations to show instrumented function definitions and usages • Fix active item background in suggestion menu for readability (thanks to zelark) https://calva.io/debugger/ for more info about the debugger.#2020-04-2921:57wilkerlucio[com.wsscode/async "1.0.5"] is out! This release adds a helper to handle async try/catch on streaming processes. Docs at: https://github.com/wilkerlucio/wsscode-async#error-catching-on-streaming-processes#2020-04-2921:58wilkerlucio@U051SS2EU @U11BV7MTK @U050ECB92 from the thing we were talking earlier at #core-async#2020-05-0110:46plexuslambdaisland/uri {:mvn/version "1.3.45"} is out! The main additions are functions to deal with query strings, query-map, assoc-query, and a bugfix for how query strings are normalized https://cljdoc.org/d/lambdaisland/uri/1.3.45/doc/readme#2020-05-0113:31mike_ananevNew release of Context library with some bug fixes. https://github.com/redstarssystems/context#2020-05-0114:16Tamizhvendan SHoneyEQL 0.1.0-alpha16 - Supports Logical Operators & Relationship Attributes in filters https://github.com/graphqlize/honeyeql/blob/master/changelog/2020-05-01.md#2020-05-0210:41borkdudeclj-kondo 2020.05.02: https://github.com/borkdude/clj-kondo/releases/tag/v2020.05.02#2020-05-0213:37plexusKaocha 1.0.629 is out, with two new plugins, :orchestra and :preloads, as well as a bugfix. Kaocha is a feature complete, user friendly and extensible test runner. Thanks @danielcompton for the new plugins! https://cljdoc.org/d/lambdaisland/kaocha/1.0.629/doc/readme#2020-05-0223:08mauricio.szaboJust published Chlorine, Socket REPL and nREPL plug-in for the Atom editor. On this release, an interesting addition: it's possible to render arbitrary "reagent" elements. This can open lots of possibilities for interactions on the editor that depends on code from the REPL, huge customizations, data science, and the possiblity to customize the renderer as far as one can think of. The documentation have better examples on what's possible: https://github.com/mauricioszabo/atom-chlorine/blob/master/docs/extending.md#interactive-results#2020-05-0223:09mauricio.szaboAlso, beginning to support Orchard functions. For now, only info is implemented, but more will come 🙂 There's also lots of experiments on integrating pink-gorilla inside the REPL, thanks to this new renderer and the work from @UCSJVFV35 on the pink-gorilla/gorilla-ui project.#2020-05-0223:23Adrian SmithIf I'm understanding that right it looks amazing#2020-05-0223:50eggsyntaxWow, very cool!#2020-05-0316:24mauricio.szaboAny questions, please ask here or on #chlorine channel. I'll be glad to answer then 🙂#2020-05-0307:02Adam HelinsA funky kind of tree, nested maps where leaves actually have two paths, one specifying time and the other one specifying space. Really quite useful for problems involving any notion of prioritization: https://github.com/dvlopt/rktree.cljc#2020-05-0307:55plexusInteresting! Can you explain or point at a use case for this?#2020-05-0308:06Adam HelinsSoon, it forms the core of discrete-event simulation engine I am finalizing 🙂#2020-05-0318:05slipsetVersion 1.5.2 of clj-commons/fs - File system utilities for Clojure - is released No big changes, but https://github.com/harold removed some reflection warnings, thanks for doing that, and thanks to the infatiguable @borkdude for the review#2020-05-0408:20EugenI did an integration for Apache OFBiz ERP and clojure repl - Github is here https://github.com/netdava/ofbiz-clojure-repl and there is also a video https://www.youtube.com/watch?v=XXxJDZRzu_E&amp;feature=youtu.be . Right now it's just the repl inside ofbiz and access to ofbiz services.#2020-05-0415:41fingertoeThat’s pretty awesome — I think I might try to do something very similar with Moqui…#2020-05-0416:23EugenThanks and good luck. Did not know about Moqui#2020-05-0514:02adamfeldmanMoqui looks awesome, I’d also never seen it. Anyone familiar with other similar free/open-source tools that provide something like an ERP over an API? On the commercial front I’ve seen https://commercetools.com and https://www.elasticpath.com/#2020-05-0514:08Eugenover API I don't know - but there are a few of them - OFBiz is one - a bit older but I am checking it out - seems to have potential. https://ofbiz.apache.org/ . Scipio uses OFBiz underneath https://www.scipioerp.com/ - java based. Python: https://github.com/frappe/erpnext#2020-05-0514:10adamfeldmanAh I forgot erpnext! They’re awesome#2020-05-0514:10Eugenyes, I would like to bring some clojure love to OFBiz#2020-05-0514:10adamfeldmanLast I looked at OFBiz it scared me off 🙂#2020-05-0514:11EugenI did the repl and now I'm looking at fulcro#2020-05-0514:11adamfeldmanBut I’d like to be wrong on that#2020-05-0514:11EugenI think fulcro api over OFBiz is something that might be doable#2020-05-0514:11adamfeldmanAwesome, Fulcro RAD would be a nice layer atop ERP APIs#2020-05-0514:11EugenI agree#2020-05-0514:12adamfeldmanI’m working in a similar space but more focused on CRM than ERP#2020-05-0514:12Eugennice#2020-05-0514:12EugenI'm looking for an ERP to grow my business and maybe offer to clients as well#2020-05-0514:13Eugenanything online?#2020-05-0514:16adamfeldmanI’d start with running ERPNext, in a Docker container or similar. I looked a bit at ERPNext last year at a previous job, as well as OFBiz, Odoo, etc. Retail ecommerce use-cases. ERPNext seems to be the best balance of FOSS, maturity, functionality, and sanity with regard to customization (it’s just Python, Frappe framework is interesting, and there’s some sort of REST API)#2020-05-0514:16adamfeldmanNote if you want to host ERPNext for others, there may be a licensing issue#2020-05-0514:17adamfeldmanBut building atop its API may be different (I’m not a lawyer, etc 😀)#2020-05-0514:42EugenThanks. More reasons to stick with OFBiz. I have settled on Clojure and ClojureScript as primary languages in the company and it limits projects to Java an JS#2020-05-0514:43EugenWhen I have something with fulcro I will ping you, maybe you would like to contribute#2020-05-0514:43EugenFulcro and OFBiz might be a good pair#2020-05-0410:54OlicalConjure v3 is out! A full rewrite! https://github.com/Olical/conjure/releases/tag/v3.0.0 * It runs entirely inside Neovim's LuaJIT now. No extra JVM or AOT compile step involved. * It's written in Fennel, a Lisp, and compiled to Lua using Aniseed https://github.com/Olical/aniseed * Based on nREPL (and optional CIDER middleware) now instead of prepl. So it works with shadow-cljs/babashka etc! * It supports more than Clojure, so far it's just Fennel+Aniseed but I'll be adding Racket and Janet (and more!) ASAP. I hope it's interesting to non-Conjure users and a welcome upgrade for users of older versions! Enjoy 🎉 😄 https://asciinema.org/a/325517#2020-05-0421:27vlaaad#cljfx 1.7.0 is released! Cljfx is a declarative, functional and extensible wrapper of JavaFX inspired by better parts of react and re-frame. https://github.com/cljfx/cljfx Notable changes since the previous announcement: - added handling of cljfx.skip-javafx-initialization java property that solves most AOT-related issues, see https://github.com/cljfx/cljfx#aot-compilation-is-complicated - bumped JavaFX dependency to latest release; - added some more props to various nodes and improved cache invalidation for memoization contexts.#2020-05-0507:51Adam HelinsAfter a first preliminary version, here is an engine for doing discrete-event simulation and much more: https://github.com/dvlopt/dsim.cljc It is a bit of a long read, but I hope it will introduce you to a few interesting ideas. It is my rather deep reflection on the role of time in computation which takes ideas from simulation in order to generalize them to programs in general. Data science, animations, event-driven programs, and much more. By being purely functional and by mixing idioms from Clojure (eg. interceptors/coffee grinders), I believe the design is quite unusual for that sort of things. Besides, I took great care ensuring it is ready for distributed computing. It is also a reflection on how we can build programs that are completely serializable, taking care of those unfriendly bits (functions, infinite sequences, etc). I found that framing a fair share of my programs as simulations has served me right, and I hope it will do the same to you!#2020-05-0507:52jaihindhreddy> Besides, I took great care ensuring it is ready for distributed computing. fdat is starting to make much more sense to me now :)#2020-05-0512:04plexuslambdaisland/glogi {:mvn/version "1.0.63"} is out, an idiomatic ClojureScript front-end for goog.log, with improved heuristics for when to colorize output (browsers), when to output objects directly (cljs-devtools), or when to format to plain text (node, graaljs) https://github.com/lambdaisland/glogi/#2020-05-0512:15mikethompsonre-frame sprint May 2020 https://github.com/day8/re-frame/issues/589#2020-05-0516:22Tamizhvendan Shttps://www.graphqlize.org/blog/graphqlize-update-3/#2020-05-0517:17miikkametosin/spec-tools 0.10.2 is out with large number of small bug fixes. Special thanks to @iagwanderson, who contributed 10 PRs for this release! https://github.com/metosin/spec-tools/blob/master/CHANGELOG.md#0102-2020-05-05#2020-05-0519:22bartukaThanks for your patience ;)#2020-05-0602:42pfeodrippeRun TLA+ operators anywhere (made in Clojure and GraalVM compiled), there is an example with #babashka =D https://github.com/pfeodrippe/ummoi#2020-05-0606:25wilkerlucio[com.wsscode/async "1.0.6"] is out. This is a bug fix introduced by a change in 1.0.5, where in the com.wsscode.async-cljs.clj I switched from cljs.core.async to clojure.core.async. And as I found after a lot of debugging, this can introduce compilation errors in cljs that are hard to track down, so if you using this library in version 1.0.5 I highly encourage this upgrade.#2020-05-0608:12uochanJust released antq ver 0.2.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq#2020-05-0608:48Eugennice, I saw there is no gradle support. for gradle users (clojurephant) there is https://github.com/ben-manes/gradle-versions-plugin#2020-05-0610:10CrispinSpire version 0.1.0-alpha.8 released! https://github.com/epiccastle/spire - Updated sci to 0.0.13-alpha.19 - implement local execution context - extend shell module environment#2020-05-0715:54amarjeetHello everyone, I have published two libraries that some of you might find useful :) 1. `memsearch` - A ClojureScript library to provide in-memory full-text indexing and search facilities. (https://github.com/coderafting/memsearch) 2. `humane-time` - A ClojureScript library to help produce meaningful statements out of date-time and intervals. (https://github.com/coderafting/humane-time#2020-05-0716:57jrwdunhamHi all, My Clojure Gherkin testing library https://github.com/jrwdunham/tegere is in a usable state, so check it out if you're interested. It lets you specify tests using the simple https://cucumber.io/docs/gherkin/reference/ language and lets you implement the step execution in Clojure. It uses https://github.com/Engelberg/instaparse to parse the Gherkin and a bit of https://github.com/tonsky/datascript to implement the scenario filtering. Feedback welcome. Enjoy!#2020-05-0718:32borkdudeBabashka pods are an exciting new way to extend babashka dynamically with features provided by other programs. They are introduced in babashka v0.0.92 released today. Babashka pod documentation: https://github.com/borkdude/babashka/blob/master/doc/pods.md Follow up in #babashka#2020-05-0718:45valtteriReally cool!#2020-05-0718:46lilactownthe links to example pods seem to be broken @U04V15CAJ#2020-05-0718:50vlaaadNext up: babashka OS!#2020-05-0718:53borkdude@U4YGF4NGM links fixed#2020-05-0719:14markaddlemanBabushka is a great operating system – it lacks a good emacs, though? 🙂#2020-05-0719:17lukaszReally cool - reminds me somewhat of how Terraform plugins/providers are handled 👏#2020-05-0810:45valtteri@U2845S9KL you can now hook emacs + CIDER nicely to Babashka with the recent nrepl support 😉#2020-05-0912:17borkdudeBabashka pods are now available on the JVM as well! https://github.com/babashka/babashka.pods#2020-05-0810:28just.sultanovHi! I’ve just released a new version of clj-monaco. A ClojureScript library for the Monaco Editor. Link: https://github.com/just-sultanov/clj-monaco#2020-05-0811:33CrispinSpire version 0.1.0-alpha.9 released. https://github.com/epiccastle/spire lots of bugfixes in this one. - Failing ssh explicit key based connections when ssh agent is used but empty - line-in-file module does not insert prefix spaces in line - sudo not working for attrs - require and load-file to support hyphen to underscore mapping in filenames - sudo assertion fails when sudo cannot resolve local hostname - curl fails with NPE when body empty (eg :method :DELETE) - wrong filename printed on debug output#2020-05-0813:12mpenetNew release of Ex -> https://github.com/exoscale/ex • adds datafy support#2020-05-0813:41JorinThis approach to error handling makes so much sense to me! Thanks for sharing 🙂#2020-05-0813:48mpenetyou're welcome 🙂#2020-05-1004:54tony.kayAt the request of a user I explored the possible use of Fulcro as the full-stack part of a Reframe app. Turns out it really was pretty simple. Not sure if I’m missing something (I’m no reframe expert), but I made a video of how one would go about it from a Fulcro perspective. Gives you all of the full-stack graph abilities of Fulcro (and much of the other support, like UI state machines, form state management, etc.) while still being able to use Reframe’s full feature set. https://www.youtube.com/watch?v=ng-wxe0PBEg&amp;feature=youtu.be#2020-05-1010:31martinklepschNew maintenance release of confetti/s3-deploy , a small library to efficiently sync files to an S3 bucket. Great for small deploy scripts using clj too: https://github.com/confetti-clj/s3-deploy#cli-tools#2020-05-1022:24CandidJoker v0.15.4 is released https://github.com/candid82/joker/releases/tag/v0.15.4#2020-05-1023:06tony.kayFulcro 3.2.5 Released. This version includes a number of minor improvements to the internals, and a few bug fixes. It also makes a minor modification to the behavior of the new synchronous transactions: Using them will no longer schedule a full UI refresh. This was judged to be an error in the original implementation. You can use app/schedule-render! if a localized sync change needs a wider refresh, but the sync optimization itself works best if acts more like a strictly component local change. https://github.com/fulcrologic/fulcro#2020-05-1112:21bozhidarPiggieback 0.5 is out! The big news is that it now supports nREPL’s pretty-printing mechanism. More details here https://github.com/nrepl/piggieback#pretty-printing All nREPL clients will get this out-of-the-box when using the new Piggieback.#2020-05-1114:01jarohenAfternoon all - we've just released Crux 1.8.3 🚀 This release introduces S3 support and the ability to subscribe to the transaction log, as well as the usual performance optimisations and bug fixes More details in the #crux channel, and the release notes here: https://github.com/juxt/crux/releases/tag/20.05-1.8.3-alpha#2020-05-1116:55fmnoisehttps://github.com/fmnoise/flow version 4.0 is released with new artifact id and lots of new functionality: - new protocol-based implementation for defining failure and non-failure processing and throwing - chain function for applying multiple functions for non-failure results in chain - handle - function for applying success or error handler depending on value - ex-info! functional wrapper for creating and throwing ex-info - autocarrying for then, else, thru and their call-based versions - cljs support (experimental)#2020-05-1117:30Alex Miller (Clojure team)org.clojure/core.async 1.2.598 is now available • onto-chan, to-chan use of go-loop incompatible with blocking colls, replace with onto-chan! onto-chan!! to-chan! to-chan!! (deprecate onto-chan, to-chan) • to-chan! and onto-chan! added to cljs for portability#2020-05-1223:07danielcomptonClojurists Together (https://www.clojuriststogether.org) has some exciting news coming next week. If any companies or devs have been on the fence about joining, please get in touch, this week would be a great time to join and be part of the announcement. DMs open for more info. Thanks!#2020-05-1303:32Vincent CantinI made a small library, inspired by Spec and Malli. For now it only validates data, more features will be added later. Features: • no macro, no static registry, pure functions. • fully data driven, models are hash-map based, • support recursive definitions, sequence regex, • relatively simple implementation, very short to read (about 100 lines of code) • helpers functions to create the hash-map models painlessly, • cross platform (.cljc) Non features: • does not integrate with anything else, • does not try hard to be performant, • no roadmap or timeline: I made this library mainly for my own usage, and I take my time. Feedback welcome in a thread. https://github.com/green-coder/minimallist#2020-05-1323:39vemvnice! what was the main driver to author it?#2020-05-1402:23Vincent CantinFor a project, I needed something easier to use than Spec, data driven, that support recursive definitions and sequence regex .. and none was currently available with all those criteria, so I made my own.#2020-05-1402:24Vincent CantinSee https://github.com/green-coder/vrac/issues/3 for more details#2020-05-1313:26OlicalConjure v3.1.0 is out! https://github.com/Olical/conjure/releases/tag/v3.1.0 a bunch of things added and fixed, enjoy!#2020-05-1421:57xscCheck out into-docker v1.0.0 and you'll never have to write another Dockerfile! I'm quite happy about it. 🙂 https://github.com/into-docker/into-docker/releases/tag/v1.0.0#2020-05-1421:59xscBuilt with Clojure and GraalVM (as it is popular these days), with a sprinkle of UNIX domain sockets and love. And of course you can still write Dockerfiles, especially if you want to give back to the community and create an into-docker builder image! If you have a Clojure/Docker project lying around, how about going into the root directory and running the following?
into build -t my-clojure-app intodocker/clojure
(I'm looking forward to your bug reports.)
#2020-05-1423:18uochanJust released Dad ver 0.3.0, Small configuration management tool for Clojure. Added nREPL server support! This is heavily powered by @borkdude's babashka.nrepl. https://github.com/liquidz/dad#2020-05-1500:21tony.kayFulcro, RAD, and related libraries all updated and released. https://github.com/fulcrologic/fulcro https://github.com/fulcrologic/fulcro-rad Fulcro itself just has a minor patch for synchronous transactions. RAD has been improved to support better handling of reports that roll up statistics or need dynamically generated columns on the client. The demo has been updated with a new sales report that is based on the real invoices in the system that demonstrates how to build the resolvers in Pathom, and how to consume them in a RAD report. https://github.com/fulcrologic/fulcro-rad-demo#2020-05-1514:18Tamizhvendan SHoneyEQL Update (2020-05-01) - Documentation revamp, Syntax Improvements, Exists Filter & Bug Fixes https://github.com/graphqlize/honeyeql/blob/master/changelog/2020-05-15.md#2020-05-1607:13lispycloudsclj-docker-client The idiomatic docker client for Clojure finally hits 1.0.0 🎉 🎉 https://github.com/into-docker/clj-docker-client Major features include full readiness for GraalVM native! Follow up in #docker#2020-05-1611:36mikethompsonre-frame now has a grown up website: https://day8.github.io/re-frame/#2020-05-1809:32henrikGiven how small the menu is when not hamburgerized, I think it could be shown at smaller window sizes than it is currently.#2020-05-1613:57borkdudepod.lispyclouds.docker: a docker pod for babashka: https://github.com/lispyclouds/pod-lispyclouds-docker made by the same awesome @rahul080327 who just announced clj-docker-client above#2020-05-1620:07m_travenAnnouncing blockoid, a thin Clojurescript wrapping of Blockly (Google’s Javascript library for building Scratch-like interfaces in the browser). https://github.com/ParkerICI/blockoid The combination of Blockly and Clojure enables rapid, easy creation of powerful combinatorial user interfaces and visual languages.#2020-05-1621:37richiardiandreaCc @UAACFLVUZ - what we are looking for!#2020-05-1621:53clj-dave😄 sweet, this is great!#2020-05-1710:45teodorluHello! 👋 Want to mentor two dedicated Clojure learners to enable them to contribute to an open-source Clojure project? See thread 👉#2020-05-1710:45teodorluEXHIBIT A. Why? • Get to really follow up on two dedicated learners; get to know them, not just answer a random question. • Clear goal in mind: beginner-friendly issue on Open-Source project#2020-05-1710:45teodorluEXHIBIT B. Where? • https://slack-redir.net/link?url=https%3A%2F%2Fgithub.com%2Fathensresearch%2Fathens%2Fblob%2FClojureFam%2Fdoc%2FClojureFam.md&amp;v=3https://clojureverse.org/t/want-to-mentor-learning-clojurians-for-open-source-work-with-athens/5974#2020-05-1712:01pezVery cool. Love the passion coming through in the writing!#2020-05-1810:17teodorlu@U0ETXRFEW Seeing how you interact with the #calva community has been a very good anchor 🙂#2020-05-1810:57pezOh, wow, thanks!#2020-05-1716:10ikitommiWelcome [metosin/reitit "0.5.0"]. Reitit is a fast data-driven routing library for Clojure/Script. 0.5.0 contains a lot of small changes, including: * reitit-core: order of magnitude faster router creation, thanks to smarter route conflict resolver * reitit-ring & reitit-http: improved OPTIONS handling, helpers to serve files, nil-friendly routes. * reitit-frontend: fixes in handling History * reitit-sieppari: faster interceptors, drops default support for core.async, see sieppari docs how to enable it * reitit-swagger-ui: defaults to latest version v3.25.3, instead of old (but classy) v2.10.0 * changes in updated support libs: spec-tools, schema-tools, jsonista, muuntaja, sieppari and malli full changelog: https://github.com/metosin/reitit/blob/master/CHANGELOG.md#050-2020-05-17 big thanks to all contributors! Discussion and help at #reitit#2020-05-1719:46ruben.hamersAwesome, I am about to start a new Clojure api project and doing some research if I should use compojure-api vs reitit. My conclusion was to go with reitit, Ill use the newest version right away 😄 Thx!#2020-05-1717:28CrispinSpire version 0.1.0-alpha.10 released. initial nrepl release https://github.com/epiccastle/spire/releases/tag/v0.1.0-alpha.10 - remove -h, -o, -v flags for less surface area to conflict with user flags - fixed local execution under a user running fish shell fails to gather facts - add nrepl support - added lots of docstrings#2020-05-1718:37genmeblogGenerate really nice documents and html pages and books with Clojure snippets from R Markdown (https://rmarkdown.rstudio.com/) using knitr (https://en.wikipedia.org/wiki/Knitr), rep (https://github.com/eraserhd/rep) and nRepl. Here is how to glue all the tools: https://github.com/genmeblog/rmarkdown-clojure#2020-05-1813:08mpenetspec based coercion library for clj(s) https://github.com/exoscale/coax (fork of spec-coerce)#2020-05-1816:57mauricio.szaboJust published a new version of Chlorine, socket REPL (and nREPL) package for the Atom editor. On this release, a simple fix for Lumo / Plank, but also a huge improvement on the way you can customize Chlorine. On this version, you can add custom commands with ClojureScript, only. See this tweet for an example: https://twitter.com/mauricio_szabo/status/1262177280610222081. Discussions on #chlorine channel 🙂#2020-05-1818:20danielcomptonhttps://www.clojuriststogether.org/news/announcing-summer-of-bugs/#2020-05-1818:35pezSo. Awesome. #2020-05-1818:20danielcomptonhttps://www.clojuriststogether.org/news/announcing-the-clojurists-together-foundation/#2020-05-1818:38pezCongratulations!#2020-05-1818:39lilactown@U051KLSJF fantastic work on communicating these changes and setting all of this up. I can tell a lot of time went into making this happen and help us (users, maintainers, communities and corporations) understand how it effects us and all the benefits it brings. Thank you!!#2020-05-2014:28teodorluCongratulations! 100 % agree with @U4YGF4NGM - your effort is so valuable to the community.#2020-05-1820:05Akshay C. GollapalliAnnouncing Dataworks: A distributed-by-default stored-function engine with REST API and stream processing capabilities built on top of crux. (early, yet to test at any real scale) https://github.com/acgollapalli/dataworks#2020-05-1904:09uochanJust released toyokumo/tarayo ver 0.2.0, SMTP client library for Clojure. https://github.com/toyokumo/tarayo#2020-05-1911:55namenujust published a persistent deque library here. https://github.com/namenu/data.deque it's used very rarely, but once in a lifetime, you may need it though. 😀#2020-05-1911:57namenuTIP: mfikes/cljs-bean is super helpful when you need to build a custom collection for ClojureScript!#2020-05-1912:12borkdudeI wonder if that Advent of Code puzzle from 2018 which needed a dequeue can be solved within reasonable time with this#2020-05-1912:12borkdudeMost people implemented their own mutable dequeue for that#2020-05-1912:14namenuyeah exactly! that was one of my test suite :)#2020-05-1912:17borkdudehttps://github.com/potetm/advent-of-code/blob/master/src/advent_2018/day_9.clj#2020-05-1912:17borkdudeoh really 🙂#2020-05-1913:12Alex Miller (Clojure team)nice work!#2020-05-1918:11markusHello. Defold Game Engine source code is publicly available as of today. The editor is written in Clojure so if you want to check out the code for a desktop application written in Clojure, go check it out :) https://github.com/defold/defold#2020-05-1918:12markusContributions are welcome by the way. #2020-05-1918:26markusApparently this was posted already in news and articles. Sorry about the double post. #2020-05-2016:22Tamizhvendan SGraphQLize Update (#4) - Aggregate Functions & Group By https://www.graphqlize.org/blog/graphqlize-update-4/#2020-05-2016:24kszabocongrats! good call on avoiding burn-out 🙏#2020-05-2120:11isakFor this, it looks like you're adding one extra field per agg function you are supporting:#2020-05-2120:12isakdid you consider something like sumRating: sum("rating") instead?#2020-05-2120:13isak(Asking because I did something similar for a different case (filters), and now I kind of regret it)#2020-05-2203:52Tamizhvendan SThanks @U08JKUHA9. TBH, I went this way after trying with different approaches. I did consider this sum("rating") but this resulted in#2020-05-2203:54Tamizhvendan S
sum("rating") {
  value
}
#2020-05-2203:55Tamizhvendan SI do agree the field per aggregate function is not the cleanest way but I had no other better option#2020-05-2203:55Tamizhvendan SLove to receive your inputs / suggestions that’y I am keeping this library in alpha state and building it in public#2020-05-2203:56isakinteresting, why did it result in returning an object instead of a scalar?#2020-05-2203:59Tamizhvendan SThanks a ton @U08JKUHA9 I just checked the GraphQL schema https://graphql.org/learn/schema/#arguments. It is possible to have arguments on fields. My Bad, I was thinking only it applies to queries and get carried along on.#2020-05-2204:00Tamizhvendan SI will fix it in the next release. Thanks again :)#2020-05-2204:00isakyea this may be a good case for it, if you want to avoid the potential field "explosion"#2020-05-2204:00isaknp 🙂#2020-05-2204:06Tamizhvendan SCreated an issue to keep track of it https://github.com/graphqlize/graphqlize/issues/57#2020-05-2020:14tony.kayFulcro 3.2.8 is on Clojars. This version fixes an accidental regression on component indexing. https://github.com/fulcrologic/fulcro#2020-05-2113:59oliycarmine-streams - utility functions for working with Redis streams Allows you to create streams and consumer groups, consume streams reliably, deal with failed consumers and unprocessable messages and gain visibility on the state of it all with a few simple functions. https://github.com/oliyh/carmine-streams#2020-05-2114:24phoenixjjHi All, I am trying to learn Clojure(Script) via building some social network app and recording and putting up videos. Please have a look and let me know your feedback. Ideas are also welcome. I have not made playlist public yet, but anyone with a link can view videos. https://www.youtube.com/playlist?list=PL8Ozad-LO2oWrDpbfoReZiw-pKylfQW4e Thank You.#2020-05-2117:13Jakub Holý (HolyJak)Good luck! Tip: next time use #news-and-articles#2020-05-2211:36emil0rVersion 0.8.1 of ez-database realsed. This realease adds simple CRUD model possibilities for the lazy. https://github.com/emil0r/ez-database#2020-05-2217:23hlshipcom.walmartlabs/schematic 1.3.0 Schematic is a Clojure library which aids in assembling systems from configuration data. GitHub repo: https://github.com/walmartlabs/schematic Documentation: https://walmartlabs.github.io/apidocs/schematic/ Featured changes in 1.3.0: - Uses Component's transitive-dependencies function, which handles certain edge cases correctly - Captures exceptions during component instantiation, with better reporting#2020-05-2302:00wilkerlucio
#2020-05-2313:08wilkerlucioJust did a new release 1.0.10, I noticed on deftest-async I'm using namespaced keywords for config, and I had used simple ones on pulling-retry, new version makes so every case uses qualified ones, but its a breaking change, please upgrade 🙂#2020-05-2313:10wilkerluciothis also introduces a simpler inteface for common scenarios on pulling-retry#2020-05-2316:46lilactown[lilactown/helix "0.0.11"] has been released! This is a great release not only because of new features / bug fixes, but also because it’s the collaborative work of people in the community to help build a great library 🙂 Helix is a React wrapper for ClojureScript focusing on compile-time optimizations and ergonomics. It provides as little runtime as possible, while allowing us to still use all of the great things about ClojureScript: immutable data, REPL-driven development, and a great standard library! Changelog and docs are here: https://github.com/Lokeh/helix/ Big thanks to @wxitb2017 @dominicm @alidcastano @orestis @tomc and others for contributing code, docs and feedback 🏆#2020-05-2318:20seancorfieldseancorfield/next.jdbc {:mvn/version "1.0.445"} -- a modern low-level wrapper for JDBC-based access to databases -- https://github.com/seancorfield/next-jdbc -- It's been a while since I announced a new release this widely so check out the change log for everything that has been added/updated recently. In this release: Enhancements: * Enhanced support in plan for "metadata" access: row-number and column-names can be called on the abstract row (even after calling datafiable-row). In addition, Associative access via numeric "keys" will read columns by index, and row abstractions now support Indexed access via nth (which will also read columns by index). Fixes #110 (better support for the as-arrays builder with plan). Support for Stuart Sierra's Component library, via guide for usage. Note that Component is not a dependency -- if you don't use Component, you can ignore this function. * Investigate possible solutions for #106 (mutable transaction thread safety) -- experimental locking on Connection object. Documentation: * Add example of getting generated keys from execute-batch!. * Add MySQL-specific result set streaming tip. Add array handling example to PostgreSQL *Tips &amp; Tricks. PR #108 from @maxp. Follow-up in #sql#2020-05-2413:59CrispinBootleg 0.1.8 released. the babashka pod release - add babashka pod support - YAML upgrade to SnakeYAML 2.0 - Fix Build failed when trying build with graalvm-ce-java11-19.3.0 - Fix the ns/require code from spire in bootleg? - Fix Running from file in same directory requires leading ./ - Fix Generating XML preserving the tag name case - Fix reflection error preventing XML roundtrip https://github.com/retrogradeorbit/bootleg#2020-05-2422:54Bobbi TowersI'm gonna use this to build my portfolio :)#2020-05-2606:00Heikki HämäläinenLittle tutorial of creating a small web-server with ClojureScript, Macchiato and Reitit: https://dev.solita.fi/2020/05/26/clojurescript-web-serverwith-macchiato-shadowcljs-and-reitit.html#2020-05-2616:13eggsyntaxHi Heikki! Thanks for posting -- next time I'd recommend putting it in #news-and-articles instead; we try to reserve #announcements for library announcements 🙂#2020-05-2616:44Heikki HämäläinenThanks, will do that gladly!#2020-05-2618:20slipsetCould it be that you’ve forgotten to add a :require for http in ‘Making minimal Machiato Server’?#2020-05-2618:36Heikki Hämäläinen@U04V5VAUN It is on the branch “02_add_minimal_macchiato” but not in the example which is not complete namespace. But now I noticed that I forgot to push the branches to GitHub (pushed now). See the git checkout 02_add_minimal_macchiato for full example of that part.#2020-05-2618:37slipset🙂#2020-05-2620:13mauricio.szaboJust published a new version of Socket REPL package for the Atom editor: Chlorine, version 0.7.2 On this release, dropping ink external dependency (people that work with Socket REPL will have to upgrade a command to remove inline results) and added support for custom renderers. Documentation is still missing, but it'll come little by little, so feel free to ping me at #chlorine channel or start a thread here 🙂.#2020-05-2712:01plexusThe first release of lambdaisland/funnel is out, a Transit-over-Websocket message relay https://clojureverse.org/t/announcing-the-first-release-of-funnel/6023#2020-05-2923:37seancorfieldhoneysql {:mvn/version "1.0.444"} -- https://github.com/seancorfield/honeysql -- Turn Clojure data structures into SQL! First off, HoneySQL has a new home: in order to set up CI, I needed it under an account I have full control over, so Justin Kramer, the original project maintainer, has transferred the repo to me. All existing links should continue to work (because a repo transfer redirects everything) and the documentation URL has not changed: https://cljdoc.org/d/honeysql/honeysql/ This is a 1.0.x release, to recognize that HoneySQL is stable (and has been used in many production apps for years), and it will follow MAJOR.MINOR.COMMITS versioning from now on. Bug fix: #259 -- column names are now always unqualified in inserts. (PR from @jrdoane) Enhancement: #257 -- added support for cross-join / merge-cross-join / :cross-join. (request from @dcj) Infrastructure: * Switch dev/test pipeline to use Clojure CLI / deps.edn instead of Leiningen. * Add CI via both CircleCI and GitHub Actions (the latter tests on OpenJDK 8, 11, and 14). Both of these test the README examples, run Eastwood, run the tests as ClojureScript, and run the tests as Clojure (on 1.7, 1.8, 1.9, and 1.10). * Remove macrovich dependency as this is no longer needed with modern ClojureScript. Follow-up in #honeysql (with general SQL-related chatter in #sql ).#2020-05-3008:59Chris McCormickHey all, this is not Clojure but I wrote it because I miss Enlive & Hiccup style document manipulaton so much when working in Python. https://pypi.org/project/ntpl/#2020-06-0106:22metasoarousNice! There was a thing like this a while back called cottonmouth, which wasn't doing a great job of staying up to date, and which I ended up forking for a project. I'd love to see someone actively maintaining a tool like this. Hiccup to the world!#2020-06-0106:22metasoarous(PS, For reference: https://github.com/metasoarous/cottonmouth)#2020-06-0201:42Chris McCormick@U05100J3V ah yes i actually tried this and i can't remember why i settled on pyhiccup instead. pyhiccup is also not maintained but it is pretty much feature complete for my use-case. i am wrapping pyhiccup and also beautifulsoup4 so that you can do both the enlive type of things (replacing/modifying existing HTML forms) and the hiccup type of things (generating new HTML forms declaratively).#2020-06-0206:11metasoarousCool#2020-06-0118:59seancorfieldorg.clojure/java.data {:mvn/version "1.0.78"} -- convert between Clojure data structures and Java Beans (and other Java objects) -- https://cljdoc.org/d/org.clojure/java.data/1.0.78/api/clojure.java.data#from-java-shallow -- adds new from-java-shallow multi-method that provides functionality similar to clojure.core/bean but works on a wider variety of Java objects and also provides options to omit properties that would derive from "dangerous" methods (such as .getMoreResults on java.sql.Statement which is a mutating function!) and to provide control over how exceptions are handled (instead of just blowing up). This was done primarily to support datafication of richer Java objects (such as what next.jdbc now allows). Note: from-java has existed for a while and performs a deep (recursive) conversion. Follow-up in #clojure#2020-06-0119:15JakubA new release of Closh, unix shell based on Clojure, is out. It adds features and fixes for the JVM version to improve experience when using it as a primary interactive shell. https://github.com/dundalek/closh/releases/tag/v0.5.0#2020-06-0208:30oliyHi everyone, I'm pleased to announce the release of https://github.com/oliyh/re-graph. re-graph is a GraphQL client for Clojurescript and Clojure with re-frame bindings and support for queries, subscriptions and mutations over websocket or HTTP. Many thanks to https://github.com/loomis for implementing the vast majority of the features in this release. This release changes: • Running on JDK 10 or lower will require the original Clojure implementation based on clj-http and gniazdo. See the https://github.com/oliyh/re-graphfor details • The options supplied in `init` have been reorganised to separate websocket and http parameters (again, see README) This release adds support for: • Finer control over the http and websocket connections (`:impl` option) e.g. sharing a cookie store as per https://github.com/oliyh/re-graph/issues/58 This release improves: • Fewer dependencies on the JVM It's available now on Clojars. Thanks and enjoy, Oliy#2020-06-0210:25Ivan FedorovJust launched my all-Clojure project Lightpad on Product Hunt. https://producthunt.com/posts/lighpad Lightpad is a calendar that lets you use your excellent visual cortex for planning. Support, repost, critique (even brutal) and comments are most welcome! Cheers!#2020-06-0211:18localshredReally cool idea beautifully executed. As a calendar are you planning to do integrations with google, icloud, etc? Or is it more for tracking daily work?#2020-06-0211:20localshredalso I signed up but can't login anymore saying I haven't confirmed my email (but there's no email in my inbox or spam)#2020-06-0211:21localshredpossible I could have fat fingered my email#2020-06-0211:25Ivan Fedorov@U5RFD1733 hey! thanks for the kind words! that would make a good tweet methinks 😉 Yes, Google Calendar is on top of my dev stack! I’ll try the iCloud as well, as I’m myself in this ecosystem. Can you DM me your email? I’ll check#2020-06-0211:33include'all-clojure' awesome! congrats! @ognivo do you have any blog post about this tech stack and details? would be very interesting. (edit: fix typo)#2020-06-0211:35Ivan Fedorov@U3NP9AM0S thanks!! will do!#2020-06-0211:35include@ognivosuper!! 🙂 thank you.#2020-06-0211:37Ivan Fedorov@U5RFD1733 I’ve checked mail delivery w my personal email, it worked!#2020-06-0211:47localshredhm, I probably mistyped it then#2020-06-0211:48localshredI guess I don't use iCloud for calendars, so not a vote for that platform in particular. gcal and fastmail are the two I use#2020-06-0212:01Ivan FedorovEvery feedback, critique, nitpick comment on PH helps a lot!#2020-06-0212:13localshreddon't have a PH account, will create one in a bit#2020-06-0307:05namenuI can export my data in edn. heavenly!#2020-06-0307:06Ivan Fedorov@U7JHWBCS0 😌#2020-06-0307:07Ivan Fedorov@U7JHWBCS0 fellow Clojurians don’t let fellow Clojurians to use anything less than edn 🙂#2020-06-0307:07Ivan Fedorov@U7JHWBCS0 That would make a good tweet btw!#2020-06-0908:25Ivan Fedorov#5 of the day on PH, thank you all for the support! ❤️#2020-06-0908:38Ivan Fedorovif it helps anyone – I’ve published a PWA gen library which I use for Lightpad https://github.com/spacegangster/page-renderer#2020-06-0211:25Rowan Barnard@ognivo Looks cool and interesting!#2020-06-0211:26Ivan Fedorovthanks a lot! that would make a good tweet! 😉 haha#2020-06-0211:58Rowan BarnardYou're welcome 🙂#2020-06-0211:59Ivan FedorovAlso, a comment w critique or feedback on Product Hunt would really help! 🙂#2020-06-0212:00Rowan BarnardOut of curiosity - is it informed by any UI research or it is just your own original creation?#2020-06-0212:01Rowan BarnardOK I will post on Product Hunt#2020-06-0212:07Rowan BarnardOK I posted, short and to the point 😄#2020-06-0212:07Rowan BarnardI hope it's OK#2020-06-0212:08Ivan FedorovTHanks a lot 😁 ! Yeah, you can add your question there, that would enrich the discussion !#2020-06-0212:09Rowan BarnardI haven't used it yet myself, just watched the video, but I haven't been happy with normal calendars like Google and this looks like an interesting approach to making them more usable.#2020-06-0215:58seancorfieldFolks, please don't have discussions in the #announcements channel -- follow-up in other channels instead. Thanks.#2020-06-0311:53Rowan BarnardAh OK, sorry about that, new to Slack, which channels are best to follow-up on?#2020-06-0314:19martinklepsch@UC2U7E30B usually people posting announcements add a “follow up in #xyz” alongside their announcements. As a reply to the original announcement post is also fine though 🙂#2020-06-0316:41seancorfield(in a thread, not a new post Martin means)#2020-06-0322:28Rowan BarnardAh OK thanks, I'm pretty sure I understand now 🙂#2020-06-0212:51delaguardoJust released matchete - simple pattern-matching library for clojure(script) It was strongly inspired by meander (awesome tool for data transformation) Main differences: • small codebase (~250 cloc => 2.4Kb extra code in compiled javascript bundle) • no macro to make library composable and fully working in JavaScript environment • extendable via data by adding custom matching rules https://github.com/xapix-io/matchete#2020-06-0222:11emil0rPushed version 0.1.1 for https://github.com/emil0r/ez-wire . This should fix the validation for forms#2020-06-0403:19Chris McCormickReleased v0.1.1 of flk - a Clojure-like LISP that runs on Bash, built on top of mal. • str-upper-case, str-lower-case, str-capitalize from https://github.com/rosineygpsh-env to modify environment via shell commands e.g. source and export from https://github.com/ProfAvery • Updated @kanaka/mal upstream. • Bugfix in compiling standalone scripts. https://github.com/chr15m/flk/releases/tag/v0.1.1#2020-06-0416:59bozhidarCIDER 0.25 (“Bergamo”) is out! It’s a relatively small release that introduces a couple of improvements and fixes a several long-standing and quite annoying bugs. Special thanks to Clojurists Together for supporting my work on that release! Check out the release notes for details https://github.com/clojure-emacs/cider/releases/tag/v0.25.0 Cheers! cider#2020-06-0913:01robert-stuttafordmake sure you also update shadow-cljs when you upgrade, folks 🙂 it got a bit twilight-zoney there for a minute#2020-06-0609:52CrispinSpire 0.1.0-alpha.13 released https://github.com/epiccastle/spire/releases/tag/v0.1.0-alpha.13 ### Fixed - fixed missing spire.selmer namespace mount - fixed broken stdout during evaluation - fixed a number of problems with upload - fixed a problem with java.time.Instant - fixed slow local process uploads - fixed unhygenic context macros - fixed shell module snaffling command exit code when using :creates ### Added - added a big list of java classes - added cheshire json library#2020-06-0623:03uochanJust released antq ver 0.4.0, Tool to point out your outdated dependencies. Add support customizing error output. This allows to output annotations in GitHub Actions:relaxed: https://github.com/liquidz/antq#2020-06-0717:30agilecreativityPublish my very first Babaska pod library for search/replace configuration file https://github.com/agilecreativity/pod-b12n-mgrep It wraps the functionality of https://github.com/clj-commons/multigrep#2020-06-0806:33AndrosHi, I wanted to announce my Web Framework: Tadam https://www.tadam-framework.dev/ I developed it for my own work and I have decided to release it in case it is useful to the community. I appreciate any feedback.#2020-06-0807:40practicalli-johnLooks really great and simple to use framework will an excellent project website, thank you for sharing.#2020-06-0811:52AndrosThank you!#2020-06-0817:46valtteriExcellent docs!!#2020-06-0913:54amarjeetHi @UM6KGAW3Z, this looks like a really nice minimal setup to get-started with. I just noticed the Clojure installation instruction via brew on Mac. The Clojure installation might be error-free with Clojure’s custom homebrew tap: https://clojure.org/guides/getting_started -> brew install clojure/tools/clojure#2020-06-0921:55AndrosOh, thanks for the bug! #2020-06-0821:20mauricio.szaboJust published Atom editor package Chlorine version 0.7.5. In this version, bugfixes for nREPL connections (lots of errors appearing on console while trying to connect a Socket REPL); also, documentation on how to use the new "custom renderers" on the editor. Discussions on #chlorine!#2020-06-1022:19borkdudebabashka v0.1.1: the introduction of defprotocol and defrecord for compatibility with more libraries https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v011-2020-06-10 This release can now run clj-commons/camel-snake-kebab and juxt/aero as libraries.#2020-06-1119:02Jacob O'BryantBiff is officially released: web framework + self-hosted deployment solution for Clojure (built on Crux, inspired heavily by Firebase) https://findka.com/biff/ I introduced Biff about a month ago (https://findka.com/blog/migrating-to-biff/). Since then I've written the documentation linked above and done a lot of code cleanup.#2020-06-1901:03sergey.shvetsGreat work! I'm working on my own boilerplate around firestore / EQL for exactly the same use case. Will definitely consider Biff for the next app, as I imagine it will be much more cost-effective then firebase after free tier. 🙂#2020-06-1903:02Jacob O'BryantThanks! You might be interested in this by the way: https://github.com/jacobobryant/trident/blob/master/doc/firestore.md I wouldn't plan on Biff beating Firebase on price anytime soon--I'm already paying $25/mo with Biff now ($10 for the droplet and $15 for managed postgres to back Crux), vs pennies when I was on Firebase. But I've loved having a JVM backend, and having total control over everything.#2020-06-1904:35sergey.shvetsThanks for sharing. I'll check it out. Yes, for some projects you want to have some back-end and cloud functions just don't cut it for all the use cases.#2020-06-1501:24CandidJoker v0.15.5 is released: https://github.com/candid82/joker/releases/tag/v0.15.5. It can now format Clojure code. If you use Sublime Text, this plugin https://github.com/candid82/sublime-pretty-clojure uses Joker to format Clojure files when saving. Should be easy to write a plugin for Emacs and other editors, if anyone is interested. Formatting is not perfect and has some issues. I intend to improve it over time.#2020-06-1503:59uochan@U75LX44UA Great work! I'll add a support with vim-iced ☺️ https://github.com/liquidz/vim-iced/commit/1083fe183b347c3ef7d644cc3bc65b10b4a6b0a1#2020-06-1506:55dominicmHow does the formatting work?#2020-06-1516:42Candid@UBL24PLE6 Thanks! Let me know when it's released so that I could put a link to Joker's readme.#2020-06-1516:45Candid@U09LZR36F it's more like indent-only mode of zprint, it respects blank lines and line breaks (for the most part). It's intended to be used with editor plugins on save.#2020-06-1516:46dominicm@U75LX44UA so it's like cljfmt, and just sets a particular amount of indent?#2020-06-1514:13rutledgepaulvAnnouncing https://github.com/Guaranteed-Rate/lazy-map. This is a new (and maintained!) fork of a pre-existing library thinktopic/lazy-map. Other than establishing the fork, this release brings increased test coverage, several bug fixes, compatibility with java.util.Map, and merge/deep-merge functions that preserve laziness. Cheers!#2020-06-1808:13Lucy WangCould be quite useful. E.g. in a ring middleware we can add a :user key to the request map, and only load the user from db when the handler function (or other middlewares need it)#2020-06-1814:16rutledgepaulvIndeed! My usage is a similar idea to that. I have a map with unknown consumers and some pieces of that map now require making a network call. I can still present the map and not break my consumers but now the data is only actually retrieved on demand.#2020-06-1514:59genmeblogdplyr-like api build on the top http://tech.ml.dataset is now on Clojars. https://github.com/scicloj/tablecloth Please refer documentation (https://scicloj.github.io/tablecloth/index.html) with 550+ usage examples.#2020-06-1515:02otfromnice one 🙂#2020-06-1611:21kimimHi all, I managed to eval Clojure in org-mode without project.clj and cider. Maybe someone is looking for this solution, you can check my emacs config: https://github.com/kimim/kimim-emacs/blob/master/README.org#clojure#2020-06-1619:37bringeHello - while working on a project recently for which I developed user authentication, I decided to separate the auth part out into its own repo for my own reference later, and I figure others might find it useful as well, especially if you want to use pedestal. There's some packaging and deployment in there as well. https://github.com/bpringe/auth-template#2020-06-1706:32eskosThank you for this! 🙂 These things tend to be really complex once one decide to go feature complete (just see the flow chart for proper REST resource!), so having this available as template is of a great help 👍#2020-06-1706:37eskosAnd just in case you're not aware what I'm referencing: https://github.com/for-GET/http-decision-diagram#2020-06-1714:49Lucy WangJust read a bit about the code, seems the session must be tied to a user - which makes me thinking how would you implement features like "require captcha after logging in failed for 3+ times" ?#2020-06-1802:37bringe@U8SFC8HLP Welcome! Yeah I made the flow chart mainly to keep track of what I was doing to begin with. @UP90Q48J3 The sessions can be anonymous - user_id is null in the db row in that case (to be specific). See the anonymous-session interceptor here: https://github.com/bpringe/auth-template/blob/954b8a78f7e6d91b4dd12446ec69aba004c53d1e/src/auth_template/service.clj#L208#2020-06-1802:38bringeThere may be a better way to handle anon sessions - but this is a simple starting point / works.#2020-06-1808:08Lucy WangThanks, LGTM!#2020-06-1717:03jarohenEvening all - #crux 1.9.0 is out 🙂 release notes here: https://github.com/juxt/crux/releases/tag/20.06-1.9.0 Highlights of this one include significant disk space reductions and query speed optimisations, and the introduction of transaction functions - enjoy!#2020-06-1717:09telekidThe fact that submitting a transaction function is as simple as sending a quoted form is a great reminder of why I love Clojure so much#2020-06-1808:53oliyHi everyone, I am pleased to announce the second release of https://github.com/oliyh/superlifter. Superlifter is an implementation of DataLoader for Clojure. This release adds support for: • Clojurescript! • A debounced trigger that runs a fetch when no muses are added to the bucket for n ms Feedback appreciated, as always, here or on Github. Cheers, Oliy https://github.com/oliyh/superlifter#2020-06-1810:24elaroussoh thank you 🙏, just last week i was planning to make something like this (to work with lacinia)#2020-06-1811:39oliyYou're welcome! I found the 1+n problem was really constraining how we built our service on lacinia#2020-06-1814:53athosI’m happy to announce the first release of Pogonos https://github.com/athos/pogonos, another Clojure(Script) implementation of the Mustache templating language. • Completely compliant to the Mustache spec, including lambdas • As fast as Stencil • Supports Clojure/ClojureScript/self-hosted ClojureScript, like cljstache • Also provides user-friendly error messages for parsing errors Any feedback is welcome!#2020-06-1815:20dominicmThis is a wonderful contribution to the clojure ecosystem, thank you 🙏#2020-06-1900:33athosThank you for your kind words! 😂#2020-06-1912:48eval2020#announcements Atom-feed Happy Friday everyone! As a byproduct of the https://clojurians.zulipchat.com/#narrow/stream/180378-slack-archive, I’m happy to announce an https://www.clojurians-zulip.org/feeds/announcements.xml of this stream. Details: • every non-thread message is an item • there’s a couple of hours delay to allow for editing and moderation • code can be found at https://gitlab.com/clojurians-zulip/feeds/ Follow-up in #community-development#2020-06-1913:02borkdudewill this feed be hosted somewhere?#2020-06-1914:12martinklepsch@U04V15CAJ https://www.clojurians-zulip.org/feeds/announcements.xml#2020-06-1914:14borkdudecool. so is there going to be a feed for each channel? e.g. https://www.clojurians-zulip.org/feeds/releases.xml?#2020-06-1916:12seancorfieldThe code seems to only cover the announcements stream. I guess you could fork it and run it on other Zulip streams and topics and produce feeds for other "channels" and host that wherever you want?#2020-06-1916:13borkdudeJust wondering#2020-06-2010:06eval2020@U04V15CAJ I think this would indeed work for streams like #news-and-articles and #releases. I might give it a stab next week!#2020-06-1917:37csmI did some more work on https://github.com/csm/intake.manifold (adapts manifold streams/deferreds for use in core.async go blocks) to work much better with streams. There are still some corner cases I’m sure, but this does work better with streams now than the initial, naive approach. Release version 0.1.4.#2020-06-1918:19tanzoniteblackin a similar vein to the intake.manifold project that @csm301 just mentioned, Yummly has just released a forked version of manifold that fixes a number of bugs from let-flow as well as introduces a new namespace and macro called tsasvla that allows you to write code that looks like core.async/go, but works with deferreds instead of channels: Relevant documentation: https://github.com/yummly/manifold/blob/master/docs/deferred.md#manifoldtsasvlatsasvla Relevant namespace: https://github.com/yummly/manifold/blob/master/src/manifold/tsasvla.clj#L58#2020-06-2112:02borkdudeclj-kondo v2020.06.21 introduces a new hooks API which allows writing code to support custom macros https://github.com/borkdude/clj-kondo/releases/tag/v2020.06.21 This work was sponsored by Clojurists Together as part of their Summer of Bugs program. Thanks! Also read the introductory blog post: https://blog.michielborkent.nl/2020/06/21/clj-kondo-hooks/#2020-06-2117:08ASThis is dope! Does the clj-kondo binary need to be upgraded to use this?#2020-06-2118:04borkdude@U015RJM9ARG yes#2020-06-2308:17Chris McCormickHey all, after 3.5 months of work and 249 commits, I present Slingcode: https://slingcode.net/ It's a web based IDE with live-reloading which you can use to make, run, and share web apps. I built it in Clojurescript (with shadow-cljs, reagent, and bootleg 🙏). I made it for my kids so that they have a nice simple environment in which they can learn web app development without complex command line tooling and hosting, but I hope it will be useful to non-kid amateurs and maybe even professionals too. I humbly offer this to the Clojure community. Thanks for everything you all do. I'm so grateful to be able to build things using the amazing tooling of this ecosystem. P.S. Clojurescript hosted apps coming soon I hope!#2020-06-2308:59walterlThis is excellent! I love the "offlineness" and light weight of it. Well done! 👏#2020-06-2310:14slipsetThis is super cool! The dinosaur thing doesn't work in Safari, though,#2020-06-2310:14slipset
loadSounds: function () {
            if (!IS_IOS) {
                this.audioContext = new AudioContext();
#2020-06-2310:15slipsetAudioContext isn't available in Safari it seems, so I guess the (!IS_IOS) check needs to enhanced a bit...#2020-06-2312:18mirothat is pretty cool! love the styling!#2020-06-2312:52CrispinChris put up a demo video here https://www.youtube.com/watch?v=0tONEHy-P7M#2020-06-2312:59eggsyntaxVery cool! What a lovely gift to the world.#2020-06-2316:27ghadihow cool, congrats#2020-06-2318:44CaseyThis is so cool! Mega props. love the webtorrent integration.#2020-06-2401:16Chris McCormickThank you very much all, very humbling! If anyone cares to help the project out, a Product Hunt / Hacker News upvote would help give it a boost: https://www.producthunt.com/posts/slingcode https://news.ycombinator.com/item?id=23611505#2020-06-2405:10CrispinSpire 0.1.0-alpha.14 released https://github.com/epiccastle/spire/releases/tag/v0.1.0-alpha.14 Fixed - download of directory without :recurse prints no error or warning - download module progress bar malformed - remove flashing output - user module does not create users home directory - user module does not alter :groups if user already exists Changed - rewrote :default output module - remove download module :flat. module should always be flat downloads - remove old spire.transfer namespace#2020-06-2408:54timo#2020-06-2418:18chrisnhttps://github.com/techascent/tech.ml.dataset is now at a full 2.0+ release. It is out of beta. tmd is a data frame library for clojure with efficient cpu and https://gist.github.com/cnuernber/26b88ed259dd1d0dc6ac2aa138eecf37 performance characteristics. We have great support for csv, tsv, xlsx, sequences of maps, parquet, arrow, and nippy which is extremely fast especially for large things. We also have https://github.com/techascent/tech.ml to https://xgboost.readthedocs.io/en/latest/jvm/ and the https://haifengl.github.io/. If none of that means anything to you then put another way you can load really, really large csv files (millions of rows) and work with them interactively then save them out to nippy files or postgres. We make that very easy and support most of the normal clojure.core paradigms (filter, sort, group-by) along with a whole host of special things related to dataset processing from pandas or R's data.table. You can also just take a sequence of maps and make a dataset out of them, do some work, and then get a sequence of maps back to do your next thing 🙂. https://github.com/techascent/tech.ml.dataset#2020-06-2418:20gunarthanks for the dumbed down explanation#2020-06-2418:53chrisnMy pleasure-jargon is no fun for any of us 🙂.#2020-06-2421:08martinklepschYeah, love this style of announcement 👏#2020-06-2421:37jsa-aerialAlso, if you like a nice dplyr like api over tmd @U1EP3BZ3Q has created a very comprehensive piece of work: https://scicloj.github.io/tablecloth/index.html. Some of this is still evolving with tmd. I can vouch for all of this as being seriously great stuff! Data science in Clojure is making some serious advances#2020-07-0219:21respatializedvery exciting to see. I wasn't able to tell from my cursory look at the source code - is sparse support back on the table for this or is that still waiting on upstream changes from tech.datatype?#2020-07-0219:23respatializedextremely interested in destroying R on its own turf for iterated matrix operations distributed across many cores.#2020-07-0220:29chrisnI think destroying R in anything that R cares about is going to be damn hard but you can find the linear algebra libraries that support sparse operations from here: https://java-matrix.org/ Given how far along these systems are I would recommend getting your data into those libs and giving it a shot. Are you working on recommendation systems? Where is the need for sparse coming from?#2020-07-0221:17respatializedThe label propagation algorithms I've worked with often benefit from sparse data (gigantic distance matrices, etc).#2020-06-2418:49seancorfieldseancorfield/next.jdbc {:mvn/version "1.0.478"} -- database access via JDBC -- lots of enhancements since my last #announcements post! The highlights of recent releases include: - A new namespace next.jdbc.types with functions to "type-hint" values so parameters are set with a specific SQL type -- see https://cljdoc.org/d/seancorfield/next.jdbc/1.0.478/api/next.jdbc.types - A new function next.jdbc/with-options wraps a connectable with default options so you don't have to provide those options to every single SQL operation on that connectable (a much-requested feature!) - Official support for the jTDS driver (for SQL Server), for MariaDB, and for PostgreSQL 12.2.0 (previously PostgreSQL 10.11 was the targeted test version) - A new namespace next.jdbc.datafy to provide datafy/`nav` over various JDBC data types, making it possible to lazily navigate through the metadata of your database -- see https://cljdoc.org/d/seancorfield/next.jdbc/1.0.478/api/next.jdbc.datafy - Access to row-number, column-names, and metadata when reducing over the result of plan, as well as Indexed access to column values - Built-in support for Stuart Sierra's Component library (if it is on the classpath) that provides a connection pooled datasource with the start/`stop` lifecycle - Improved support for timeouts (and a whole new section of docs that talk about them) - Lots of documentation improvements! Follow-up in #sql#2020-06-2501:20mauricio.szaboJust published Atom's Chlorine version 0.8.0 (with 0.8.1 coming soon) - a great improvement for ClojureScript evaluation. Now, Chlorine implements the Shadow-CLJS remote API (it's experimental - to use it, enable Experimental Features on the package's configuration), so evaluation of code in ClojureScript is now faster, more reliable, and redirects console output in node, node-library, and browser targets. It also is coming with interesting features like showing compilation errors on the editor (with links to navigate to each error), and in the future probably even more interesting stuff. Discussions on #chlorine. Also, thanks @thheller for helping me implement these new interesting features 🙂#2020-06-2502:32mauricio.szaboA little video I made while I was developing this version: https://twitter.com/mauricio_szabo/status/1274184226175361024#2020-06-2523:45sogaiuvery nice!#2020-06-2518:05samedhihttps://clojure-zip-viewer.web.app/ is a web app to interactively manipulate data with clojure.zip. Github code is at https://github.com/samedhi/zip-viewer. The UI is https://material-ui.com/ with https://github.com/Day8/re-frame. It was built using https://github.com/bhauman/figwheel-main , supports all but 3 of the functions in clojure.zip, and allows for undo/redo of your loc manipulations. Rational: I was doing the "Cracking the Coding Interview" problems and several solutions involved using clojure.zip. I realized that my understanding of the library was a bit limited and wanted a visual tool to mess around with clojure.zip. This is that tool. Help: Three functions do not work; (zip/zipper), (zip/edit), and (zip/seq-zip). I have provided more details in the issue tracker. If anyone could provide pointers, help, or PR's to allow for those features I would be deeply appreciative. I have left the app-db rendering at the bottom to try to entice people to help me. 🙂 Thank you.#2020-06-2613:38plexusAdding some examples to the page would be very helpful! you might also be interested in https://github.com/lambdaisland/zipper-viz , which creates graphviz based graphs of zippers. I always planned to wrap it in a similar interactive site but never got around to it. You can see what these graphs look like in this talk I did https://lambdaisland.com/blog/2018-11-26-art-tree-shaping-clojure-zip#2020-06-2610:44blueberryNeanderthal 0.32.0 released! The https://twitter.com/hashtag/Clojure?src=hashtag_click matrix library! https://twitter.com/hashtag/Maths?src=hashtag_click https://twitter.com/hashtag/HPC?src=hashtag_click CUDA GPU CPU https://neanderthal.uncomplicate.org#2020-06-2613:44practicalli-johnpracticalli/clojure-deps-edn is a collection of Clojure CLI tools.deps to provide a default set of aliases and tools for development with deps.edn based projects. Currently there are over 30 aliases, covering a range of tools for development, testing, deployment, dependency version management, dependency visualization, etc Library versions within aliases are updated monthly (or sooner if new releases are announced here). Updates can be done any time using the :outdated alias. Aliases use meaningful names (hopefully) and encourage a common set of names for deps.edn project (although they are easily changed to what ever your needs are) Suggestions for further tools are most welcome, along with pull requests. https://github.com/practicalli/clojure-deps-edn#2020-06-2616:09seancorfieldThanks for the README shout out to my dot-clojure file as inspiration! 🙂#2020-06-2616:09seancorfieldI think some of your aliases are longer than I would want to type in!#2020-06-2620:16practicalli-johnCredit where credit is due. You are a great inspiration to my work, thank you. Yes, I did thing that some people prefer shorter names 🙂 I prefer longer names that have meaning to me, maybe others will find them useful or simply shorten them. I can imagine that shorter ones may be used in project specific deps.edn files.#2020-06-2721:26metasoarousCan you alias an alias?#2020-06-2721:34seancorfieldNo. Aliases do not compose in any way. Unfortunately.#2020-06-2818:55viestiThis would be ripe ground for shell completion functionality 🙂#2020-06-2616:42milgracljs-brawl is released! There are not many games written in clojure/script, especially not real-time action games with WebGL, UI/font rendering, mass point dynamics, inverse kinematics and skeletal animation but I had to make one. Enjoy! Game URL : https://milgra.github.io/cljs-brawl/index.html Source URL : https://github.com/milgra/cljs-brawl#2020-06-2618:31fedregThis is awesome. Had a ton of fun playing!! Thx for sharing!!#2020-06-2618:57milgraI'm glad you like it, thanks! :)#2020-06-2622:02eccentric JGreat work!#2020-06-2701:57Chris McCormicklol amazing#2020-06-2707:50markusReally cool :)#2020-06-2708:37David PhamThis is amazing!#2020-06-2805:29Jakub ZikaCant click on the start when trying on Android :-(#2020-06-2722:41uochanJust released vim-iced ver 2.0.0, Clojure Interactive Development Environment for Vim8/Neovim. https://github.com/liquidz/vim-iced Now supports test integraion on plain nREPL including Babashka nREPL! This functionality was sponsored by Clojurists Together as a part of their "Summer of Bugs" program. Thank you so much! Here is a simple demo: https://twitter.com/uochan/status/1277008153226309632#2020-06-2911:28LuI've received quite a few messages to make Fork work solely with Reagent. Well, I've finally found some spare time over the weekend to finally make this happen. 🙂 V2.0.0 is out with a few extra improvements as well. 🍴 https://github.com/luciodale/fork#2020-06-2912:25Chris McCormickGlad to find out about this library, looks very useful, thank you. 🙏#2020-06-2912:38LuThank you for the nice words 😊#2020-06-2922:45steveb8nPerfect timing. I was planning to start using Fork this week#2020-06-2918:21Adam HelinsA new tiny CLJS library for more accurate alternatives to setTimeout and setInterval which leverage web workers: https://github.com/dvlopt/timer.cljs For instance, those timers are not throttled to once per second when the tab is inactive and every (alternative to setInterval) tries to offer drift protection. I personally use them to schedule MIDI music in a rather timing-intensive fashion and they perform surprisingly well.#2020-06-2918:24JAtkinsNice! I may actually have a use case for this in the near future.#2020-06-2919:17Lennart BuitWasn’t performance.now being intentionally crippled by browsers to remedy timing attacks?#2020-06-2919:44fedregThat’s great, thx! Was just getting ready to port this over for a web audio project but now don’t need to. https://www.html5rocks.com/en/tutorials/audio/scheduling/#2020-06-3006:52Adam Helins@U5J5ME2NQ Interesting, I was not aware of that article but the lookahead strategy is exactly what I am using with web MIDI and I confirm it works really well. Depending on what you do, you can go pretty low regarding that lookahead window. @UDF11HLKC I believe that by default, if enabled, the result gets rounded to 1 ms which is not that bad and anyway, I guess this is the best we can do in the browser.#2020-06-3011:57Chris McCormick@U5J5ME2NQ you can see an example of that technique implemented in Clojurescript here: https://github.com/chr15m/speccy/blob/master/src/speccy/engine.cljs#L281#2020-06-3015:26borkdudeBlatantly stolen from clojure.spec.alpha, for anyone needing similar functionality: https://github.com/borkdude/dynaload#2020-06-3017:19JAtkinsIs there any way to get similar functionality with cljs? Of course only in dev with no name mangling. I'm looking at what it would take to add a cljs extension system to an app#2020-06-3017:21borkdudeTake a closer look#2020-06-3017:21JAtkinsPoint taken#2020-06-3021:25hlshipcom.walmartlabs/lacinia 0.37.0 and lacinia-pedestal 0.14.0 Lacinia is an open-source implementation of Facebook's GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Featured changes in 0.37.0: - Exceptions inside resolver functions are wrapped with extra data about field, query, location, etc. lacinia-pedestal adds support for accessing GraphQL as an HTTP endpoint GitHub repo: https://github.com/walmartlabs/lacinia-pedestal Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/ Featured changes in 0.14.0: - New, simpler, more composable API in the com.walmartlabs.lacinia.pedestal2 namespace#2020-07-0314:00andy.fingerhutHugo Duncan has released Criterium version 0.4.6 to http://clojars.org. It contains a small bug fix -- previous versions would always force a call to the JVM's garbage collector, behaving as if the value of an optional parameter gc-before-benchmark was true, even if you explicitly specify it as false. https://github.com/hugoduncan/criterium. https://clojars.org/criterium#2020-07-0402:39uochanJust released testdoc ver 1.4.0, doctest implementation in Clojure. https://github.com/liquidz/testdoc Now supports to add error position(line number) information to error messages. And also works on babashka! babashka#2020-07-0402:44AlexI've seen this in Rust and always thought it was cool, nice to see Clojure has a similar project.#2020-07-0404:52sogaiuare there convenient ways to collapse long strings in most editors?#2020-07-0405:18delaguardoBut why not to use test metadata? In that case you are not editing a string but normal clojure code#2020-07-0405:42seancorfield@U04V4KLKC Because this can test that examples you provide in docstrings are correct (as well as regular tests, via metadata).#2020-07-0405:43seancorfieldFor the same reason that seancorfield/readme exists, to turn README files into tests, so you can verify that examples in your documentation are correct.#2020-07-0405:44seancorfield(although this testdoc may be a better solution, even for README files, depending on how it deals with non-test code etc)#2020-07-0405:45seancorfield(and we should probably direct further discussion to #testing at this point!)#2020-07-0520:09vemvFor completeness, :test metadata is runnable, provided you wrap it in a fn and src/ is declared as part of your :test-paths Someone recommended that to me in Clojurians some 18 months ago and really liked the technique!#2020-07-0813:09souenzzohttps://github.com/molequedeideias/conncat#2020-07-0814:08bruno.bonacciJust released: µ/log v0.3.0 - μ/log It now features publishers for: • Console (stdout) • File • ElasticSearch • Apache Kafka • AWS Kinesis • Slack • OpenZipkin https://github.com/BrunoBonacci/mulog#2020-07-1417:02EmmanuelOgaI'm using these on a small project:
spootnik/unilog {:mvn/version "0.7.24"}
  org.clojure/tools.logging {:mvn/version "1.1.0"}
what would be a good reason to switch to ulog? The things I care about is not having to dig too deep into the java logging conf rabbithole, but I've also been thinking on having structured logging (logging to json, for instance, since my log viewer supports it)
#2020-07-1417:02EmmanuelOgathis lil guy https://www.logviewplus.com/#2020-07-1618:27bruno.bonacciµ/log breaks the barriers of traditional logging. It is designed ground up to allow logging of data. Traditional logging system which just provide a JSON formatter don’t truly log events. The interesting data has to be extracted from encoded messages. µ/log provides the facilities to publish events directly from your code. It supports multiple format and multiple systems. The fundamental idea is that events are the essential information that underpins the “3 Pillars of observability”. µ/log provides tooling to prove that. If you just use µ/log in conjunction with Elasticsearch and Zipkin you’ll get more information that many commercial observability products out there. Forget about the existing logging frameworks, just think which information you would like to have when you see your system as a blackbox and instrument your code accordingly. µ/log is just data and you can use it to monitor your system quantitatively, alert on aggregated events, slice and dice the events to narrow down a problem to the source, apply statistical learning and machine learning to extract additional insights. here is an example of some of the question you can ask just by instrumenting 1 part of your system. https://github.com/BrunoBonacci/mulog/issues/25#issuecomment-656062331#2020-07-0909:56mpenethttps://github.com/exoscale/coax 1.0.0-alpha5 is out (`s/or` bugfix)#2020-07-0914:27jerger_at_ddaWe proudly released a production ready clojurescript to embed mastodon public timelines on webpages. Example can be found here: https://meissa-gmbh.de/pages/news/ Howto & download can be found here: https://domaindrivenarchitecture.org/pages/mastodon/ Happy toothing & embeding#2020-07-1008:44Jakub Holý (HolyJak)Hello! I have created the workshop "Experience interactive development!", which takes 2-4h and targets developers with no prior Clojure experience. I have tried it with a few students and it works surprisingly well. Feel free to use it to spread the love of Clojure! See https://github.com/holyjak/interactive-dev-wshop (Feedback welcome, and I'd be happy to help you run the workshop. Currently I have only tried it face2face but plan to try to run it remotely as well.)#2020-07-1014:48Alex Miller (Clojure team)https://forum.datomic.com/t/dev-and-test-locally-with-dev-local/1518#2020-07-1015:05Alex Miller (Clojure team)REBL 0.9.226 https://www.patreon.com/posts/39177021#2020-07-1017:43Alex Miller (Clojure team)Released org.clojure/test.check 1.1.0, only change is https://clojure.atlassian.net/browse/TCHECK-155 (don't generate :/)#2020-07-1301:20dchelimskyFunny. I read that as “don’t generate 😕#2020-07-1419:18blueberryNeanderthal 0.33.0 released! The https://twitter.com/hashtag/Clojure?src=hashtag_click matrix library! https://twitter.com/hashtag/Maths?src=hashtag_click https://twitter.com/hashtag/HPC?src=hashtag_click CUDA GPU CPU https://neanderthal.uncomplicate.org#2020-07-1420:09lunik1v0.0.3 of suffragium - a clojure vote counting library - now released. Added: more control over the resolution of ties and STAR voting. https://gitlab.com/lunik1/suffragium#2020-07-1516:41rakyicool lib 🙂 I have a toy implementation of Schulze where I just followed the algorithm described in wikipedia with API adapted for a particular use case https://github.com/rakyi/votemeal/blob/master/src/votemeal/schulze.clj I’d appreciate if you could take a peek and tell me if you see any glaring issues with it#2020-07-1618:23lunik1looking a the tiebreaking code: if two candidates pats have the same beatpath strength, do you not try to resolve the tie by forbidding that link and recalculating the new beatpath strength?#2020-07-1618:24lunik1this is the tiebreaking method advocated in Schulze's paper#2020-07-1618:24lunik1(also a very good source for worked examples - i.e. test cases!)#2020-07-1621:13rakyithanks for the pointer! I did the implementation mostly for fun and presenting ties to users instead of breaking them was good enough for us, but you made me curious about the “proper” method#2020-07-1621:49lunik1full paper is on preprint here https://arxiv.org/ftp/arxiv/papers/1804/1804.02973.pdf with ties discussed in section 5#2020-07-1621:50lunik1I see why you would want to present ties to the user, but I would distinguish between ties that can be resolved by fodbidding an edge and ties that cannot (i.e. you reach a point where there is no beatpath)#2020-07-1621:51lunik1I would consider only the latter true ties in schulze (there are prescriptions on how to resolve them, but they rely on having a pre-specified tie resolution order of candidates)#2020-07-1515:30chrisnWe have released version 3.06 of https://github.com/techascent/tech.ml.dataset. https://github.com/techascent/tech.ml.dataset is a system of dataset processing similar to Python's pandas or R's data.table where we aim to combine the performance and concision of DataFrame processing with functional paradigms and a deep integration into the Clojure language. DataFrame processing is jargon for operating on rectangles of data like an SQL table or a CSV or XLSX file. We include those pathways but extend this concept to encapsulate our favorite Clojure datastructure, a sequence of maps. We store that data in columnwise as opposed to rowwise records and this leads to substantial memory savings and some different performance tradeoffs. These past few releases (and the reason for bumping to 3.X) is that we are carefully integrating the core types deeper into the Clojure language. The base dataset object now derives from `clojure.lang.IPersistentMap` and `java.util.Map` which means that clojure.core functions meant to work on maps also now work on datasets - keys, vals, get, assoc, dissoc, and destructuring all are supported. If you destructure a dataset you get back the columns. Columns themselves efficiently implement `clojure.lang.Indexed` which means `nth` works well on them and they also override `clojure.lang.IFn` so they are also functions of their indexes. Further notes: • We have a few timeseries-specific functions - `left-join-asof` which is a take on Pandas' `merge-asof` and `fill-range-replace` which is a take on Pandas' `reindex`. • The https://github.com/scicloj/tablecloth has come a long way. We really suggest you check it out if you want a very high level interface to working with data. • Nippy https://github.com/techascent/tech.ml.dataset/blob/master/docs/nippy-serialization-rocks.md means you can efficiently load/save not only datasets themselves but heterogeneous datastructures that may have datasets in leaf nodes. • Documentation is now up on https://cljdoc.org/d/techascent/tech.ml.dataset/CURRENT/doc/readme thanks to some very much appreciated prodding from @metasoarous. • We have an API https://github.com/techascent/tech.ml.dataset/blob/master/docs/quick-reference.md for operations we found to be very commonly used. Enjoy!#2020-07-1516:33metasoarousKick ass! Thanks for the announcement, and all your work on this @chrisn!#2020-07-1519:13genmeblogI've just updated tablecloth to catch up .dataset#2020-07-1518:58djanushttp://Soup.io, a repository for lolcontent, will be discontinued in a few days. I took the opportunity to use Clojure to download local copies of my friends' soups. Here's the resulting tool: https://github.com/nathell/soupscraper#2020-07-1519:15erwinrooijakkersFor those that use Logback and want to scrub sensitive data from logs there is https://github.com/mediquest-nl/logback-masking-pattern-layouts. Also with an encoder to mask the logs to stdout in GCP Stackdriver format. Usage in the XML-configuration of Logback via default regexes (for example passwords and names) or custom ones.
<layout class="nl.mediquest.logback.MaskingPatternLayout">
  <pattern>%.-250msg</pattern>
  <useDefaultMediquestReplacements>true</useDefaultMediquestReplacements>
  <regex>some-xml-encoded-regex</regex>
  <replacement>a-replacement</replacement>
  <regex>some-xml-encoded-regex</regex>
  <replacement>a-replacement</replacement>
</layout>
MaskingPatternLayout created using gen-class’s :extends :exposes-methods and :methods 🙂 so that add the end of the ceremony the logged message and regexes can be fed to string/replace.
#2020-07-1520:18HuahaiI ported Datascript to LMDB, give Datalevin a try: https://github.com/juji-io/datalevin#2020-07-1604:55David PhamAny example except from tests?#2020-07-1618:51HuahaiREADME now contains examples, and API doc is linked as well#2020-07-1716:33plexusThe first official release of Regal is out, lambdaisland/regal {:mvn/version "0.0.80"}, a library for converting Clojure data to regular expressions, as well as parsing regular expressions back to data, turning them into test.check generators, and smoothing over the differences between Java and JavaScript regex syntax. To celebrate the occasion we've created this interactive explainer. https://lambdaisland.github.io/land-of-regal/#2020-07-1716:50eskoshox @U055NJ5CC - something for Malli, mayhaps? 😉#2020-07-1717:14plexusMalli support is included (but can still be improved)#2020-07-1717:16samedhiThis is very cool, especially the ability to go forward and back between regal and regex.#2020-07-1717:34Adam Helins"Régal" means "delicious, a treat" in French, which I find appropriate for such a fine work#2020-07-1717:37plexusIn German it means "shelf". Less poetic but I guess you can use it to support other things 🙃#2020-07-1718:25plexusI added some remarks here regarding the state of the library https://www.reddit.com/r/Clojure/comments/hsyvxy/comment/fydrrp6#2020-07-1821:03ikitommicongratz! I can keep it updated while malli evolves, pushed on small PR already.#2020-07-2008:01plexusReleased a small update 0.0.89 , with some fixes to the parser, and Tommi's PR for the Malli integration.#2020-07-1717:32Adam HelinsA new CLJS library providing access to the canvas: https://github.com/dvlopt/draw.cljs It is the most boring canvas library, I hope it to become the most boring CLJS library. It just provide a nicer, more idiomatic access to the original API, just straightening a few things, but no abstractions that would obfuscate the real thing. I give a couple of reasons in the readme :)#2020-07-1717:34gunarI was looking for something like it today! Thanks#2020-07-1915:07mauricio.szaboJust published a new version of Chlorine package for the Atom editor. In this 0.8.2 version, I added support for resolving promises "the right way" (the old way was by changing parts of the Clojure REPL and by using internal APIs from Shadow-CLJS - of course, it didn't survive 😅). This new version is using the new "Shadow-CLJS Relay API", so while still prone to change, it's a public API so it's more stable, not a hack anymore, and it works 100% of the time! Discussions on #chlorine 🙂#2020-07-1915:09mauricio.szaboBy the way, here's a GIF explaining better what is this support for Promises. You'll need a recent Shadow-CLJS version for it to work, and to toggle "experimental features" on the configs: https://user-images.githubusercontent.com/138037/87866020-855a2480-c952-11ea-8c16-b6b8f2f69df2.gif#2020-07-2003:00sogaiuwow!#2020-07-1916:00dominicmA small utility for finding which namespaces your project uses are the slowest: https://sr.ht/~severeoverfl0w/slow-namespace-clj/ I wrote it to see about choosing lighter dependencies in my projects/libraries. (goes well with https://clojure.org/guides/dev_startup_time for finding out the impact AOT has on speedup)#2020-07-1921:33uochanJust released antq ver 0.5.0, Tool to point out your outdated dependencies. Supports Maven S3 repositories now! https://github.com/liquidz/antq#2020-07-2011:57sergeiudrisPitch: Let's make a non-commercial express-in-code game, create a new e-sports scene. It will be a new kind of games: players use a programming language to express/build/solve, with unbounded diverse scenarios, that can be installed via a link. Existing e-sports games are micro heavy or stale. https://github.com/express-in-code-game/design/blob/master/project.md#2020-07-2211:30Vincent CantinIs it related to Clojure? If not, I suggest to move this to the #off-topic channel.#2020-07-2510:50sb“what programming language will this prject use ? • clojure and/or clojurescript” #2020-07-2517:42Quentin Le GuennecI may be interested#2020-07-2013:54Alex Miller (Clojure team)clj 1.10.1.561 and tools.deps.alpha 0.8.709 are now available. See https://clojure.org/guides/getting_started for upgrade instructions.#2020-07-2013:54Alex Miller (Clojure team)The primary change in this version is an update of the dependency expansion code around exclusion handling. In particular, when the same lib/version appears in the transitive dependency tree with different exclusion sets, the logic has been modified to use the intersection of the exclusion sets (exclude only those child libs excluded in all tree locations). Previously it was somewhat arbitrary which exclusion set would be used.#2020-07-2013:58Alex Miller (Clojure team)In testing this, I've noticed that these cases are particularly likely to give confusing output with clj -Stree (the lib set is correct but the tree will often include a lib in a place where it is excluded). Plans are under way for a better -Stree.#2020-07-2209:11mihaelkonjevicAnnouncing keechma/next 0.0.1 - a data driven state management framework for single page apps https://github.com/keechma/keechma-next/ . For any questions join us in the #keechma channel#2020-07-2312:08Alex Miller (Clojure team)Cognitect joins Nubank! https://cognitect.com/blog/2020/07/23/Cognitect-Joins-Nubank#2020-07-2312:48vlaaadDoes Nubank have plans to make Datomic’s source code accessible? This article — https://building.nubank.com.br/welcoming-cognitect-nubank/ — mentions that “Nubank is best served by the widespread use of Datomic at other companies. Datomic will continue to be developed as a commercially available, general-purpose database (as opposed to being pulled in-house or restricted)“. Making source available seems like good aid in that.#2020-07-2313:15jcfCongratulations to all of the team! Well deserved.#2020-07-2315:53marciolJust remembering that if Datomic were open-source, this kind of lib[1] would allow Datomic to be available even more than now, to other communities, accelerating the revolution that we want to see regarding databases and data management. This can allow users of other languages, to use Crux as rich client, and as the readme says: “they gave up Datomic already” 1: https://github.com/naomijub/transistor#2020-07-2315:57vlaaadBy the way, I was not talking about open sourcing datomic#2020-07-2316:31marciolWhen you said about “make the Datomic source code accessible I think that you was talking about make it open-source @U47G49KHQ. Good to remark this point.#2020-07-2319:07Toby ClemsonReleased cartus 0.1.10, a structured logging abstraction for logging data rich events with support for multiple logging backends: https://github.com/logicblocks/cartus.#2020-07-2319:07Toby ClemsonGetting started guide available at https://logicblocks.github.io/cartus/getting-started.html#2020-07-2319:08Toby ClemsonInspired in part by JUXT's blog post on logging: https://juxt.pro/blog/logging#2020-07-2414:19Toby ClemsonAnd now 0.1.12 with support for a null logger and additional arity on all level logging functions to allow for cases where there's no additional context available.#2020-07-2416:01Alex Miller (Clojure team)org.clojure/tools.analyzer.jvm 1.1.0 is now available, just bumps dep to latest core.memoize#2020-07-2416:06Alex Miller (Clojure team)org.clojure/core.async 1.3.610 is now available, just bumps dep to tools.analyzer.jvm to 1.1.0#2020-07-2517:36Vincent CantinNew release of Minimallist (`v0.0.3`) New features in this version: • test.check “budget-based” generators from Minimallist’s models. They generate data of reasonable size from recursive data models. • A documentation readable on cljdoc, with examples. https://github.com/green-coder/minimallist#2020-07-2607:25HuahaiReleased Datalevin 0.2.8. Major performance improvement, now Datalevin has faster queries than Datascript. https://github.com/juji-io/datalevin#2020-07-2612:32katoxThe release 0.4.0 of neanderthal-stick is available. Neanderthal-stick extends Dragan's superb Neanderthal library with save/load functionality. Note that Neanderthal-stick is able to save the data that are currently on the GPU and load them elsewhere (or vice versa) - switching native/CUDA/OpenCL contexts as necessary. What's new: - Updated to the Neanderthal 0.33 release. - Updated to the Nippy 2.15.0 release. - Test newly supported types of submatrices with neanderthal-stick extensions. Gihub: https://github.com/katox/neanderthal-stick/ Enjoy, Kamil#2020-07-2615:13borkdudeclj-kondo v2020.07.26: 🆕 format string argument count checking!#2020-07-2615:13borkdudeAnd some other enhancements: https://github.com/borkdude/clj-kondo/releases/tag/v2020.07.26 Go to #clj-kondo to discuss.#2020-07-2623:01danielcomptonhttps://www.clojuriststogether.org/news/q3-2020-survey-results/ Clojurists Together is funding 3 projects $9,000 over three months to work on their Clojure project. Apply by Tue 28 July midnight PST. Discussion in #cljtogether #2020-07-2819:37danielcompton*Update:* We've extended applications until 31st July 11:59pm PST to give people a little longer to apply.#2020-07-2819:37danielcompton*Update:* We've extended applications until 31st July 11:59pm PST to give people a little longer to apply.#2020-07-2708:12kwrooijenReleased a new library https://github.com/kwrooijen/gungnir A data-driven database mapper / validation library. Built with HoneySQL / Malli. Inspired by Elixir's Ecto A guide can be found here with all the features: https://kwrooijen.github.io/gungnir/guide.html#2020-07-2709:24oliyHi everyone, I'm pleased to announce the 0.1.3 release of https://github.com/oliyh/kamera which aims to make screenshots more consistent and moves away from webfolder/cdp4j, which is a breaking change but important as cdp4j did not have good license terms for general use. Instead, clj-chrome-devtools provides a much nicer API for Clojure. This release changes: • kamera now uses clj-chrome-devtools instead of webfolder/cdp4j. If you used the session parameter in any of the callback hooks you will need to update your code. Additionally the :chrome-options config setting has changed, see the README for an example. • The browser window is now resized to fit the content height only before taking a screenshot by default. This behaviour is controlled by the :resize-to-contents option, see the README This release fixes: • Expand / contract icons in the report not showing up properly#2020-07-2721:13pezHello everyone, happy Monday! I have just released an extra exciting update to Calva. It brings the fruits of the Clojurists Together Summer of Bugs. Calva now displays evaluation results in a much richer and useful way, and at the same time a new, smarter, REPL window has been born. My hope is that this latter fact will remove a whole category of issues and quirks with Calva. Please feel invited to join #calva and discuss this release or whatever Calva issue you like. Read more about the output/repl window mini-project on ClojureVerse: https://clojureverse.org/t/calva-summer-of-bugs-2020/6303#2020-07-2808:31Markus StrGreat work @U0ETXRFEW! It's great how fast Calva is improving. I'm teaching Clojure to my brother and we both really like it so far#2020-07-2809:05EugenSame here. Great work @U0ETXRFEW. I'm migrating to Calva and would like to grow a Clojure company. I plan to contribute a Jack-in configuration for gradle clojurephant. I've tested the update and it works ok for me 🙂#2020-07-2809:09pezWonderful feedback! Please consider writing a review on the marketplace. 😃 Looking forward to that jack-in conf!#2020-07-2810:22Eugendone https://marketplace.visualstudio.com/items?itemName=betterthantomorrow.calva&amp;ssr=false#review-details#2020-07-2810:35pez❤️#2020-07-3018:46Markus Stryep just left a 5 star#2020-07-3018:47Markus Strone thing that would be nice is if you could easily copy/paste from/to the REPL window in VScode. That seems to be still a bit hard#2020-07-3019:29pezAwesome. Thanks!#2020-07-3019:31pezNot sure I follow on what you want there. Can you describe the use cases a bit?#2020-07-2810:26LuI just made Navi, a cljs library that changes the active menu tab based on the relevant section scrolling position. There are jquery and js solutions out there, but 1 - I didn't want to add jquery to the project and 2 - several js libs had some minor glitches that pushed me to roll my own version 🙂. ATM, the library does everything for you in that it's not very flexible, but it can become more dynamic to work also with side menus and whatnot. If you have a cljs project, I'd love to hear what you think about it. It'll take 2 minutes to set it up. https://github.com/luciodale/navi#2020-07-2810:53Lennart BuitTake a look at the Intersection observer api: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API#2020-07-2810:55Lennart BuitAs a possible improvement ^^#2020-07-2810:58LuLooking great! Will play with this thank you! 🙂#2020-07-2813:45Alex Miller (Clojure team)A new development version of clj is now available (1.10.1.590). This has not yet been promoted to "stable" release but you can https://github.com/clojure/homebrew-tools#version-archive-tool-releases if you'd like to use it:
brew uninstall clojure
brew install clojure/tools/
Changes in this version: • Added support for https://clojure.org/reference/deps_and_cli#_executing_a_function_that_takes_a_map with data from aliases and overrides on the command line (-X) • Added support for using https://clojure.org/reference/deps_and_cli#_paths • Added explicit https://clojure.org/reference/deps_and_cli#_replace_project_environment_tool for :deps/:paths override (can now pass with -T alias) • Added new program for https://clojure.org/reference/deps_and_cli#_local_maven_install (as execution function) • Deprecated support for unqualified lib names (like cheshire) - will warn on use (use cheshire/cheshire instead) • More fixes for https://clojure.atlassian.net/browse/TDEPS-152 to address problems with -Spom for both new and synced pom srcDirectory • Many changes in https://clojure.github.io/tools.deps.alpha/ • Added new https://clojure.github.io/tools.deps.alpha/#clojure.tools.deps.alpha/calc-basis API • Added https://clojure.org/reference/deps_and_cli#_basis_injection via a JVM system property
#2020-07-2813:47martinklepsch> Deprecated support for unqualified lib names (like cheshire) - will warn on use Interesting. That’s lots of libraries, is there a problem with unqualified names?#2020-07-2813:48Alex Miller (Clojure team)yes, but I will talk more about this elsewhere rather than reply in-thread here. I'm going to write several blogs today about different facets of the above#2020-07-2813:49Alex Miller (Clojure team)we're deprecating the single part naming format, you should use cheshire/cheshire instead#2020-07-2813:49martinklepschOh right, I forgot that that’s implicit. Was fearing that all those libs would need to be published under updated coordinates#2020-07-2813:50Alex Miller (Clojure team)no no#2020-07-2813:50Alex Miller (Clojure team)just the naming format#2020-07-2813:51Alex Miller (Clojure team)if you use Cursive, please note that Cursive needed to catch up to the tools.deps api changes mentioned above so you will need the latest 1.9.3-eap1 if you want Cursive to work with clj integration#2020-07-2814:00vlaaad
clj -A:deps -X:install :jar '"/path/to.jar"'
I’m going to cry escaping this in powershell 😄 Have you considered converting edn symbols back to strings for overrides to -X?
#2020-07-2814:02vlaaadSo I can have :jar /path/to.jar … Sort of how I done it here: https://github.com/vlaaad/reveal/blob/e547ecee8812d5433c3d4665d4e6b855d9dceebf/src/vlaaad/reveal.clj#L86-L89#2020-07-2814:02vlaaadI think it’s fair to expect that command line args “gravitate” towards strings#2020-07-2814:03Alex Miller (Clojure team)we considered it, decided not to do it for now#2020-07-2814:04vlaaadI’m curious to hear the reasoning, because I thought about it and decided it’s a good idea — mainly because escaping is hard#2020-07-2814:06Alex Miller (Clojure team)because "everything is an edn string" is simpler than "everything is an edn string except symbols which are quoted and read as strings"#2020-07-2814:06vlaaadthat’s fair#2020-07-2814:42Alex Miller (Clojure team)we reserve the right to change our mind :)#2020-07-2816:06seancorfield@U064X3EF3 In the paths and maven install examples in the CLI/deps reference, you seem to be missing the actual alias inside the :aliases structure.#2020-07-2816:11Alex Miller (Clojure team)thx#2020-07-2816:11seancorfield(I asked a follow-up in #tools-deps )#2020-07-2818:13vlaaad> because "everything is an edn string" is simpler than "everything is an edn string except symbols which are quoted and read as strings" This is a true statement, yet I hope you will reconsider. I think it is good to have some sort of "string gravity" for command line argument parsing in the expense of being simple, because using cli args is done for solving the task at hand rather than writing a program to share, read, run and reason about. It is much more rare to use symbols at runtime as function arguments — they are usually used near macros and loading namespaces, which is probably an uncommon configurable option for solving a task at hand. Much more common when using command line arguments is specifying urls and file paths, that are both make more sense as strings rather than symbols. Requiring strings being escaped makes it harder to use, and since escaping is different in different terminals, that makes sharing snippets of clj -X... invocations more problematic.#2020-07-2818:30Alex Miller (Clojure team)thx, I hear you#2020-07-2818:34Alex Miller (Clojure team)the problem is broader than just this though - does true mean true or "true" ? what about nil or "nil"? what's the mechanism for actually passing a symbol etc? I did go down this path for a while. may go back again, will listen for more feedback.#2020-07-2818:36seancorfieldThe downside of treating everything as a string is that 1234 comes in as a String instead of a Long and any ... yeah, Booleans and also structured arguments like {:a 1} -- now that has to be parsed in your function and if you have :args in deps.edn it will be treated differently -- as EDN.#2020-07-2818:37seancorfield{:fn something/foo :args {:port 8080}} invoked with -X:whatever :port 8888 has a Long as the default value but String for any provided override which is... ugly.
#2020-07-2818:39seancorfieldGiven that -X:some-alias is very explicitly invoking a Clojure function (and not -main), I would much rather have the arguments pre-`read` rather than having to deal with strings from the command-line but native Clojure data from the :args defaults -- and I'll happily pay the '"string"' tax for that convenience.#2020-07-2818:47Alex Miller (Clojure team)everything already comes in as a string, the question is whether you pre/post process around edn/read-string#2020-07-2818:56seancorfieldI meant "inside the called function", in case that wasn't clear.#2020-07-2818:31blueberryNeanderthal 0.34.0 released! The Chttps://twitter.com/hashtag/Clojure?src=hashtag_click matrix library! https://twitter.com/hashtag/Maths?src=hashtag_click https://twitter.com/hashtag/HPC?src=hashtag_click CUDA GPU CPU https://neanderthal.uncomplicate.org#2020-07-2819:28Alex Miller (Clojure team)A new dev version of clj 1.10.1.596 is now available thanks to the keen eyed clj bug hawks in #tools-deps - if you like some more long form words, I have written some here: https://insideclojure.org/2020/07/28/clj-exec/#2020-07-2909:22mihaelkonjevicAnnouncing keechma/pipelines - Manager for async and concurrent code in ClojureScript. https://github.com/keechma/keechma-pipelines#2020-07-2911:24bruno.bonacciHi, here the recording of Justin Conklin presentation Microbenchmarks with jmh-clojure at the https://www.meetup.com/London-Clojurians/events/271860420/ meetup. https://youtu.be/_6qVfFkBdWI#2020-07-2911:28borkdudeThanks for the fast publishing!#2020-07-2914:24tiensonqinHi, just want to share http://logseq.com which is a local-first non-linear outliner for organizing your knowledge base, it draws a lot idea from Roam Research, Org mode, and Tiddlywiki, It works directly with both plain Markdown or Emacs Org Mode. The server will never store the user's private notes, so the data are stored locally in the browser IndexedDB and can be synced using a local Git web client. It has hiccup support and sci (thanks to @borkdude) support directly. ah my bad, forget to say that logseq is also using Datascript and Rum by @tonsky and reitit by @ikitommi and shadow-cljs by @thheller! Thank you very much! The code will be open source in the next coming months (no more than three months), it'll need a lot of help, send me a dm if you're interested!#2020-07-2915:06eggsyntaxVery cool! How complete is the org mode emulation?#2020-07-2915:07tiensonqinI'd say it's mostly done The code for parsing is open sourced: https://github.com/mldoc/mldoc#2020-07-2915:14tiensonqinlmk if something breaks!#2020-07-2915:40tiensonqin@U077BEWNQ btw the app doesn't support org mode if not logged in, will fix this soon.#2020-07-2915:57JohannaCrux 1.10.0 is out 🚀 Highlights are: * SQL query support https://github.com/juxt/crux/tree/20.07-1.10.0/crux-sql * Speculative transactions - 'what if this transaction were applied?' https://github.com/juxt/crux/tree/20.07-1.10.0/docs/speculative.adoc * More types of entity IDs - particularly, strings and longs. * EQL Projections (aka 'pull syntax') https://github.com/juxt/crux/tree/20.07-1.10.0/docs/projections.adoc Check out the full release notes here: https://github.com/juxt/crux/releases/tag/20.07-1.10.0#2020-07-2916:38practicalli-johnhttps://github.com/practicalli/clojure-deps-edn is a user level configuration for Clojure CLI and deps.edn based projects. The aim is to provide a set of tools and useful aliases to help with the full development workflow. Alias names are meaningful and descriptive to avoid being over-ridden by project specific aliases, so they are more readily available. Library versions updates are checked regularly using the :outdated alias which calls depot on the configuration to check and update library versions directly. Any experimental or alpha state tools are marked as experimental - use at your own risk. Recent alias additions include • :dev - include the /dev/ path to configure REPL startup with a /dev/user.clj` file - https://practicalli.github.io/clojure/clojure-tools/configure-repl-startup.htmlrebel-nrepl - run rebel REPL with nrepl connection for editor connections (eg. CIDER, Calva) • :nrebl - REBL data browser on nREPL connection (e.g. CIDER, Calva) • :deploy-locally to add a jar to _/.m2 directory • :deploy-clojars to deploy a jar on http://clojars.org:deploy-clojars-signed to sign and deploy a jar on http://clojars.org • Updated libraries to use their fully qualified names#2020-07-3114:43mihaelkonjevicAnnouncing keechma/entitydb, second iteration of EntityDB - a client side database and normalization engine for ClojureScript https://github.com/keechma/keechma-entitydb#2020-07-3120:57Alex Miller (Clojure team)A new clj release candidate (what we were formerly calling "dev" releases) is now available - 1.10.1.619 (see https://github.com/clojure/homebrew-tools#version-archive-tool-releases for installation info) • Fixes -Spom regression in overwriting groupId in existing pom.xml files • Improvements in error handling for -X • New: -F execution specifier to invoke an arbitrary function that takes a map at the command line: clj -Fclojure.core/pr :a 1 :b 2 => {:a 1 :b 2}#2020-08-0215:02vlaaadI wanted to connect to another process from my repl, so I made a small remote repl: https://github.com/vlaaad/remote-repl. There is a very similar project — https://github.com/mfikes/tubular, but I decided to write my own because I wanted such a simple tool to be more lightweight.#2020-08-0316:31Nassinis it so hard to describe that it's just a socket repl client? 😂#2020-08-0317:12vlaaadIsn't it in the name? :thinking_face:#2020-08-0220:14Candidjoker v0.15.6 is out https://github.com/candid82/joker/releases/tag/v0.15.6#2020-08-0220:33lvhCloverage 1.1.3 is released with a whole bunch of improvements! https://github.com/cloverage/cloverage/blob/master/CHANGELOG.md#113#2020-08-0300:30djblueJust released 0.2.0 of portal, a data browser similar to REBL https://github.com/djblue/portal/releases/tag/0.2.0. https://djblue.github.io/portal/ for a live demo.#2020-08-0301:21seancorfield@U1G869VNV I just went to try this and discovered it doesn't work on Windows with Powershell (and then I looked at the source and it was obvious why). Maybe make that clear in the README to save other Windows folks some time?#2020-08-0301:21seancorfieldThis was the error, by the way:
Execution error (IllegalArgumentException) at clojure.java.shell/parse-args (shell.clj:47).
No value supplied for key: --app=
user=>
#2020-08-0301:22djblueI can add windows support, should be pretty easy. Sorry about that.#2020-08-0301:24seancorfieldFWIW, I get the exact same error on WSL on Windows. I thought that maybe starting it from Ubuntu would work since it tries to shell out to Chrome...?#2020-08-0301:26seancorfield(it looks very cool tho' -- so nice to see several open source REBL alternatives appearing -- it validates the approach is worth adopting more widely)#2020-08-0301:30seancorfieldHappy to help debug it on Windows if you want...#2020-08-0301:35djbluehttps://github.com/djblue/portal/commit/8e3b17d534eb064386a67d2ba93d6ec779d8dc1a should fix it and can be pulled via git deps#2020-08-0301:48seancorfieldWhy try to use Chrome at all? Why not just use (clojure.java.browse/browse-url "")#2020-08-0301:48seancorfieldThat should open the default browser on every platform.#2020-08-0301:53djblueI didn't know about that. I wanted to use the --app mode for chrome.#2020-08-0301:57seancorfieldNot every has Chrome installed 🙂#2020-08-0301:58Ryan ZwiefelhoferCould you fall back to browse-url if it can't find chrome?#2020-08-0301:58djbluehttps://github.com/djblue/portal/commit/7919617f799a5be8c9ce72741c98b8b6ceaaa74e#2020-08-0301:58djblueI think that would probably be best#2020-08-0301:58seancorfieldWhy use Chrome's app mode? What benefits does that have over just opening to the URL in the default browser?#2020-08-0302:00seancorfieldCool. That works on Powershell. Thanks.#2020-08-0302:00djblueIt enables me to eliminates the extra ui provided by chrome which isn't needed. It's mostly an aesthetic thing.#2020-08-0302:02seancorfieldAh, OK.#2020-08-0302:03seancorfieldSo I use Component and I tapped (alter-var-root #'system component/start) and it seems to have crashed portal.#2020-08-0302:03seancorfieldThat would tap> a record instance#2020-08-0302:04seancorfieldAfter that, portal no longer responds to tap> with any values.#2020-08-0302:05seancorfieldBackground: I have Atom/Chlorine set up to tap> every REPL evaluation -- it's how I use Reveal and I figured it would work with Portal as well... which it does for some simple values...#2020-08-0302:05djblueIt's probably related to my usage of transit#2020-08-0302:05djblueAny errors?#2020-08-0302:07seancorfieldNo. Just seems to lock up.#2020-08-0302:07seancorfield(in that it never displays any more values)#2020-08-0302:08djblueIf you clear, does it get back to a usable state?#2020-08-0302:11seancorfieldNo. I ran (port/clear) (tap> :test) and :test did not appear.#2020-08-0302:13seancorfieldIf I do (port/close) (port/open) the most recent tapped value shows up.#2020-08-0302:14djblueDid you tap> any infinite seqs?#2020-08-0302:14djblueThat would definitely break portal currently 😅#2020-08-0302:15seancorfieldIt definitely seems to be when I tap> a Var that contains a Component (a large one but no loops in it).#2020-08-0302:16seancorfieldYou should be able to repro it easily in this example app https://github.com/seancorfield/usermanager-example#2020-08-0302:16djblueI'll take a look, thanks for the example app!#2020-08-0302:16seancorfieldThere's a comment in the main.clj that defines the system component and then starts it.#2020-08-0302:17seancorfieldOnce you have system started, try to (tap> system) and see what happens...#2020-08-0302:20djblue
Error: No protocol method IWithMeta.-with-meta defined for type object: [TaggedValue: portal.transit/object, {:id #uuid "fa4bad2c-51fe-445b-97dd-31fce7326317", :type "clojure.core$promise$reify__8501", :string "#object[clojure.core$promise$reify__8501 0x2ce8cf77 {:status :pending, :val nil}]"}]
#2020-08-0302:20djblueIt was related to transit#2020-08-0302:21djblueIt's because tagged values, which is what i turn everything that isn't normal clojure data into, doesn't support metadata.#2020-08-0302:21djblueI'll see if I can fix it 👌#2020-08-0304:28djbluehttps://github.com/djblue/portal/releases/tag/0.2.1 should fix it#2020-08-0304:31djblueThanks again for trying out portal and finding these issues!#2020-08-0304:34seancorfieldTrying the latest version...#2020-08-0304:39seancorfieldI did git pull and tried it again, and it still doesn't work -- exactly the same as before.#2020-08-0304:41djblueAre you still using it via git deps or the release version?#2020-08-0304:42seancorfieldAh, 0.2.1 isn't on the windows branch. My bad.#2020-08-0304:42djblueSorry about that#2020-08-0304:42seancorfieldYup. 0.2.1 works perfectly.#2020-08-0304:42seancorfieldNice!#2020-08-0304:43djblueI'm going to delete the windows branch now then. Let me know if run into any other issues. Also, the ux is still WIP and I am very open to ideas.#2020-08-0304:44seancorfieldAre there keyboard shortcuts for navigating back and forth?#2020-08-0304:45djblueNot yet, on my todo list though#2020-08-0304:45djbluelet me know if you have any preferences#2020-08-0304:48seancorfieldI'll update my atom-chlorine-setup repo tomorrow with details about Portal so folks can choose Portal, or Reveal, or REBL.#2020-08-0308:36henrikThis looks really cool, thanks! As an additional data point, I have Chrome installed, but I don’t like to use it unless I absolutely have to. I use https://www.fluidapp.com/ to get rid of unnecessary UI in frequently used webapps.#2020-08-0310:10kwrooijenVery cool! I'm wondering if there are any plans to be able to edit fields and run callbacks on submit? I need something like this, but where I can edit the data as well. If this is to be purely for inspecting then I might fork this for my own usecase#2020-08-0314:13djblue@U06B8J0AJ, I think I'll update open to take some options. Currently I'm planning to add support for selecting a theme, but it could also take a disable chrome app flag or if people prefer to opt in instead, that could also work.#2020-08-0314:16djblue@UG9U7TPDZ editing is something I want as well, not sure how the ux would work. I was thinking of making atoms explicitly editable, I haven't thought too much about extensibility though.#2020-08-0314:17djblueIf you guys want to chat more, I would suggest joining the #portal channel#2020-08-0315:01Luke JohnsonThis is awesome! It perfect fits my use case. Thanks for showcasing it! 😉#2020-08-0310:02slipsetArdoq is happy to release verson 0.1.0 of azure-api which allows for simple usage of the Azure REST APIs in Clojure. https://github.com/ardoq/azure-api#2020-08-0314:54bozhidarCIDER 0.26 (Nesebar) and nREPL 0.8 are out! More details - https://github.com/clojure-emacs/cider/releases/tag/v0.26.0 and https://metaredux.com/posts/2020/06/15/nrepl-0-8-evolving-the-protocol.html Special thanks to Clojurists Together for their support and to all the contributors for their help! Cheers! cider#2020-08-0411:20bruno.bonacciHi all, I’ve just release μ/log v0.4.0 https://github.com/BrunoBonacci/mulog This version contains: - A new publisher for AWS CloudWatch Logs - A new publisher for [Jaeger Tracing](https://www.jaegertracing.io/) - Performances improvements for μ/trace and local-context - Various fixes and improvements - More documentation#2020-08-0411:26bruno.bonacciHi all, I’ve just release safely v0.7.0-alpha1 https://github.com/BrunoBonacci/safely Safely is a Clojure’s circuit-breaker library for handling retries in an elegant declarative way. This version contains the tracking migration to μ/log. So now all the safely s-expr are automatically traced and you can get a visual representation of your traces via Zipkin (http://zipkin.io) and Jaeger Tracing (https://www.jaegertracing.io/) Here and example:#2020-08-0422:55Coryi have been evaluating diehard but this has a lot of strong selling points for me!#2020-08-0510:38Jakub Holý (HolyJak)Nice! Here:
;; or wait a random amount of time with +/- a random variation
 :retry-delay [:random 3000 :+/- 0.35]
Q1: Is the +/- a fraction of the base, i.e. +/- 300 * 0.35? And is it really "random amount of time with +/-" or rather "given amount of time with +/- random variation"? Update: Reading more of the Readme I see this is indeed the case Typo here:
;; if the output of the body should be considered as a filed response
Q2: And what is "thread pool queue size"? How many calls can wait for a thread to become available? What happens to those that do not fit in? Update: I see it is later explained to be indeed the case. Typo: time an incrising number Q3: What does :failure-threshold 0.5 mean? That 50% of requests in some time window failed?? "Hystrix over the years became unnecessarily a huge library." - and it is also deprecated in favour of resilience4j or adaptive limits.
#2020-08-0511:42bruno.bonacciHi @U0522TWDA, thanks for the typos, i’ll fix it. A1: it produces a random jitter with uniform distribution around the base with a +/- a given pct. you can see it as roughly 3s (across many calls) A2: Queue size and thread-pool size are configurable, requests are rejected of no space/thread is available. Depending on the configuration the request might be retried in a later time A3: :failure-threshold checks how many requests failed within the last x seconds (controlled by :counters-buckets) and if the threshold is crossed it flips the circuit open.#2020-08-0414:29lvhUnfortunately one of the improvements in Cloverage 1.1.3 introduced a regression 😬 Fortunately the author of the feature with the unintended side effect was able to quickly produce an alternative that appears to work fine, and now we have a regression test for that edge case 🙂 I have cut a new release, 1.2.0 -- everyone should update. lein-cloverage will inject RELEASE automatically if you don't specify a version explicitly in your dependencies or via the CLOVERAGE_VERSION environment variable, so hopefully this will fix a bunch of projects that never even noticed anything was wrong :)#2020-08-0501:50ericdallohttps://github.com/snoe/clojure-lsp/releases/tag/release-20200805T014150 of cloure-lsp supporting CodeLens ! 🎉 More info on #lsp Here is a emacs example showing references code lens#2020-08-0504:05rymndhngHi folks! A new version of https://github.com/dakrone/clj-http is out: 3.10.2 🎉 The release contains a few bug fixes and minor enhancements (most notably: support for GraalVM). For more information, see https://github.com/dakrone/clj-http/blob/facddf1ca2d86ccc0d943f5787cce19aca3b1035/changelog.org#3102.#2020-08-0509:38viestiHi! I did some random walk summertime hacking and made a Cypress ClojureScript preprocessor using shadow-cljs, so you can write Cypress test files in ClojureScript: https://github.com/viesti/cypress-clojurescript-preprocessor. Probably very rough on the edges, but if you like, give it a try and file issues for improvement 🙂#2020-08-0607:19tony.kayI’d like to announce two new videos covering Fulcro RAD. Fulcro RAD is still listed as alpha, but it is being used in my own production projects. I decided to make a couple of videos to give people an idea of what it is capable of, and where you can go with it. Fulcro RAD (rapid application development) is an add-on library for Fulcro (which allows you to build data-driven single-page webapps). It is a purely opt-in add-on with a philosophy of “choose what you want, escape at any time”. It provides scaffolding and support for boilerplate-free schema, network API, database interfacing, forms, reports, and dashboards. I’m short on time, so the videos are not as well-planned as I’d like (there’s a little overlap), but they do cover the core details, and are hopefully clear enough. If your interested I’d recommend starting with: https://youtu.be/P2up8qcDmJs which is a bit more hands-on with what it looks like to work with RAD, and then if you’re interested in how it is all glued together continue on to this one: https://youtu.be/H2XY5kdcjGU I just uploaded them, so if they are still processing try again a bit later. There is also an early edition of a book at http://book.fulcrologic.com/RAD.html#2020-08-0618:23Ivanthanks for you work! there's ton of documentation on this project, the concepts and ideas that led to the design. Thanks for putting so much time into this. Cheers!#2020-08-0618:08tony.kayI’ve released RC versions of the Fulcro RAD core library and Datomic plugin. These two main libraries are the most heavily used in production, and have been pretty stable. The other plugins (web rendering, SQL db) are still in alpha. https://github.com/fulcrologic/fulcro-rad https://github.com/fulcrologic/fulcro-rad-datomic See the https://github.com/fulcrologic/fulcro-rad-demo or the YouTube videos (above) as well.#2020-08-0619:50blueberryNeanderthal now supports zero-install MKL out of the box! Check out new release 0.35.0 https://neanderthal.uncomplicate.org#2020-08-0705:08Vincent CantinToday I released the Diffuse library. https://github.com/green-coder/diffuse#2020-08-0712:11Jakub Holý (HolyJak)I love https://github.com/green-coder/diffuse#use-cases 🙂#2020-08-0712:44Vincent CantinI will fill it up after I am done experimenting the thing for which I built it.#2020-08-0712:40Adam HelinsA small but useful CLJS library for scheduling various type of async operations hits 1.1.0 https://github.com/dvlopt/timer.cljs Notably, it circumvents problems often encountered, for instance when using vanilla .setInterval#2020-08-0714:35Joe LaneI’ve been enjoying your other libs too. Nice work!#2020-08-0715:40Adam Helins@U0CJ19XAM It's good to hear that, thanks!#2020-08-0720:29Alex Miller (Clojure team)A new prerelease version of the Clojure tools (`clj`) is now https://github.com/clojure/homebrew-tools#version-archive-tool-releases: 1.10.1.636 • Fixes for Windows scripts with clj -X (thanks @vlaaad!) • Fix for ssh compression on git lib deps (https://clojure.atlassian.net/projects/TDEPS/issues/TDEPS-160) - thanks to @donavan for the report • Fix for the possibility of including child deps of unused versions of libs in classpath (https://clojure.atlassian.net/projects/TDEPS/issues/TDEPS-159)#2020-08-0720:51vlaaadNot sure if there is a jira issue for that, but having no :args makes clj-exec fail:
PS C:\Users\Vlaaad\Projects\tdeps> cat .\deps.edn
{:aliases {:prn {:fn clojure.core/prn}}}
PS C:\Users\Vlaaad\Projects\tdeps> clj -X:prn :a 1 :b 2
Invalid :args for exec, must be map or alias keyword: nil
#2020-08-0721:43Alex Miller (Clojure team)Oh yeah, that was reported and I forgot to fix it#2020-08-0721:44Alex Miller (Clojure team)Will do#2020-08-0813:59robert-stuttafordSimple little reference app which shows you how to bring together cider, clj-refactor, shadow-cljs into a working clj+cljs repl in Emacs. Extracted from our battle-tested production app: https://github.com/robert-stuttaford/clj-cljs-app/#2020-08-0918:25Vincent CantinNew release of Minimallist - v0.0.6 Added a describe function that parses data (similar to Clojure Spec’s s/conform function) https://github.com/green-coder/minimallist#2020-08-0919:07mike_ananevNew release of Context library - v0.1.2. Added two helpers functions. h/state-value function is now aware of clojure.lang.IDeref, so it is possible to use async value (future, promise) returned from start-fn. This may be helpful when you want to perform asynchronous connection to database and use it in another component. https://github.com/redstarssystems/context#2020-08-0919:16Shantanu KumarNew release of application configuration library Keypin v0.8.1 with bugfix and usability improvements: https://github.com/kumarshantanu/keypin#2020-08-0920:44miroHi folks! New release of Titanoboa (0.8.4) is out! Feel free to check it out, there are some bug fixes and also new UI for dependency management. https://github.com/mikub/titanoboa#2020-08-1007:18javahippieWe just published version 0.2.0 of our Testcontainers wrapper, clj-test-containers. It now covers more functionality of the original API and has improved changelogs and documentation. If you are getting tangled in infrastructure setup for integration tests, this could be helpful. https://github.com/javahippie/clj-test-containers#2020-08-1207:46katoxHi everyone, The release 0.3.0 of PGMig is out. PGMig is a standalone PostgreSQL Migration Runner using Migratus. It's just like Migratus but it is compiled into a native binary. It can be used to execute sql migrations while developing without a lein plugin but it is also useful a as blazing fast init container for apps that are deployed to Kubernetes. What's new: - The latest and greatest Migratus - GraalVM updated to 20.1.0 - The docker build now uses the official graalvm-ce as a base image - Pre-built x86_64 linux docker image is available at [dockerhub](https://hub.docker.com/r/leafclick/pgmig) Gihub: https://github.com/leafclick/pgmig Enjoy, Kamil#2020-08-1212:53Toby ClemsonReleased 0.1.14 of cartus, now with a custom clojure.test assertion for checking that log events have occurred. https://github.com/logicblocks/cartus#2020-08-1212:55Toby ClemsonDocumentation for the logged? assertion: https://logicblocks.github.io/cartus/getting-started.html#testing-for-log-events#2020-08-1219:32vlaaad#cljfx 1.7.5 is released! This release might be interesting for cljfx users who use contexts and subscriptions in their projects because it simplifies writing subscriptions — see https://github.com/cljfx/cljfx/blob/master/CHANGELOG.md#175---2020-08-12 for details.#2020-08-1219:35Daniel SlutskyIndeed useful to know. Thanks @U47G49KHQ @UPBGWFUM7!#2020-08-1521:43rschmuklerJust released the first alpha snapshot of Tapestry - bringing clojure APIs for working with Project Loom: https://github.com/teknql/tapestry#2020-08-1701:29Chris McCormickSlingcode v0.2.0 is released. Updates include image pasting, search & replace, UI fixes, and fixes to two example projects. https://github.com/chr15m/slingcode/releases/tag/0.2.0 https://slingcode.net/#2020-08-1701:29Chris McCormickhttps://user-images.githubusercontent.com/67130/90349143-41e6f900-e06b-11ea-8197-eb2ce5b7cd80.gif#2020-08-1713:25mauricio.szaboJust published version 0.9.0 of socket-repl package for Atom Chlorine. On this release, better support for "alternative" Clojure implementations like Clojerl, Babashka, Lumo, ClojureCLR and Joker, better support for nREPL, and better testing pipeline to check all these implementations. Discussions on #chlorine 🙂#2020-08-1713:30plexusKaocha 1.0.658 is out! Kaocha is an all encompassing testing tool. This release contains improvements to the the hooks and Orchestra plugins, and new affordances for plugin and test-type implementors, some of it in preparation of kaocha-cljs2. https://github.com/lambdaisland/kaocha/releases/tag/v1.0.658#2020-08-1713:35plexusFollow-up in #kaocha please#2020-08-1713:45plexusThe first release of Funnel-client is out (https://github.com/lambdaisland/funnel-client), containing Clojure and ClojureScript implementations of funnel clients. Funnel is a standalone websocket message hub meant as a basis for interactive developer tools that need to talk to a JS runtime. This library release should make it easier to get started building tools for Funnel. For more background on Funnel see the Funnel README https://github.com/lambdaisland/funnel and Funnel's announcement on ClojureVerse https://clojureverse.org/t/announcing-the-first-release-of-funnel/6023#2020-08-1713:45plexusFollow-up in #lambdaisland#2020-08-1722:16dchelimskyCognitect Labs’ aws-api 0.8.474 is now available. https://groups.google.com/forum/#!topic/clojure/pB9lEKj9wcw#2020-08-1913:51LuA new version's out v2.1.4! Now, Fork has full keyword and namespaced keyword support for input names 🙂 Next step will be to write a bunch of examples on how to use the lib with external react components like date pickers and so on plus simpler examples to help everyone getting started https://github.com/luciodale/fork#2020-08-1914:29ikitommilooks good! any examples on using nested data? (maps or sequences)#2020-08-1914:56LuWill add those examples too 🙂 !#2020-08-1923:13bedersthat's a great change!#2020-08-2021:06Alex Miller (Clojure team)Announcing today the first release of https://cognitect.com/dev-tools/index.html, a set of free tools for Clojure devs, including: • https://github.com/cognitect-labs/REBL-distrohttps://docs.datomic.com/cloud/dev-local.html#2020-08-2021:32dominicmJust to check, is the license changed, or is it the same as before (free for fun, paid for work)?#2020-08-2021:45Alex Miller (Clojure team)The dev-tools are free (pursuant to the https://cognitect.com/dev-tools/license.txt of course)#2020-08-2106:53vlaaadNote: you can't redistribute these tools.#2020-08-2110:24rickmoynihanWhat does this mean for the patreon subscriptions? Are they automatically cancelled, or do we need to stop them?#2020-08-2110:27rickmoynihanSorry if it’s a stupid question. One of our directors has the account and pays for my subscription, so wondering if I need to tell him to stop it.#2020-08-2110:56practicalli-johnNo more :local/root required for REBL, great to see. Thank you. I've updated my Clojure deps.edn config repository https://github.com/practicalli/clojure-deps-edn#data-browsing #practicalli#2020-08-2112:24Alex Miller (Clojure team)@U06HHF230 not a stupid question at all - we reduced the price to $0 to ensure no one would be charged again. There was a message that went to Patreon patrons about this.#2020-08-2112:25rickmoynihanCool, thanks for clarifying#2020-08-2113:29Michaël SalihiThx for this dev-tools ! After installing and configuring REBL in my ~/.clojure/deps.edn , I had this error when starting a REPL : Error building classpath. Could not find artifact com.cognitect:rebl:jar:0.9.240 in central () It seems, the error come from lowercase/uppercase conflict because it works fine when I call the REPL with REBL in uppercase in my config file. We can also wathcing that the maven repo contains two "rebl" directories. The lowercase one is created when I launch the REPL and so doesn't contains any JAR/Pom.xml files. Any clue ?#2020-08-2113:32Michaël SalihiP.S. Maybe it's better that I open an issue on REBL-distro#2020-08-2113:33Alex Miller (Clojure team)thanks, we're already aware and will have a new release out today to fix that#2020-08-2113:33Alex Miller (Clojure team)see #rebl for a workaround in the meantime if you like#2020-08-2113:48Michaël SalihiPerfect, thank you very much!#2020-08-2119:41Alex Miller (Clojure team)@UFBL6R4P3 fyi, new dev-tools with updated REBL that fixes this is now available https://cognitect.com/dev-tools/#2020-08-2120:01Michaël SalihiNice, thx @U064X3EF3!#2020-08-2115:34tony.kayFulcro 3.2.14 is on Clojars. This new release adds some networking helpers and primitives for building offline support: • Tenacious remote (and the packet of destiny): A wrapper for remotes that attempts to smooth over flaky networks (i.e. mobile) • Load cache. An add-on that allows you to specify that certain loads should tolerate the complete lack of a network, returning a default or the last-seen value of the response. • Durable mutations: An add-on that gives a new type of transact that has at least once semantics (even through app crashes, closed tabs, etc.) A video showing them in action (and some of the complications you’ll face using them) is at https://youtu.be/nrF9S5rxVgc https://github.com/fulcrologic/fulcro#2020-08-2411:41oliyHi everyone, I am pleased to announce the release of martian 0.1.13 Martian provides an abstraction allowing you to describe the HTTP endpoints that you call without methods, urls and query parameters leaking into your application code, allowing you to work with pure Clojure data. It builds on the flexible interceptor pattern familiar to users of pedestal and supports APIs described with OpenAPI/Swagger. Describing HTTP calls as data allows you to easily stub remote services, generate responses and add aspects such as logging and metrics. https://github.com/oliyh/martian Once again I am really pleased and proud to be supported by my contributors, thank you everyone. This release adds support for: • OpenAPI v3 - huge thanks to @czan #90 #51 • Parameter references - thanks to @kpmg-jp-jnorton #87 Enjoy! Cheers, Oliy#2020-08-2713:15Vladislavwonderful project. thanks for what you've done#2020-08-2913:49oliyHi @UNJE65T24 thank you for the kind words!#2020-08-2412:49alekczFriends, a new stable version of https://github.com/http-kit/http-kit is out 2.4.0 🎉 Graceful server shutdown. Server state queries. SNI-capable client. And for compilation to a native-image with GraalVM try 2.5.0-alpha2🙌 Check out the full list changes here: https://github.com/http-kit/http-kit/releases Thanks, as always, to @ptaoussanis#2020-08-2413:04dominicmA little off-topic, but I'm curious to know if any heap memory measurements have been done of httpkit?#2020-08-2414:02alekczI don't think so. I've never done any, and have never read of any either.#2020-08-2414:15alekczFrom what I've read in the docs and code comments, the sense I get is that it's really light on resources.#2020-08-2414:38dominicmIn theory it should be, yeah. Maybe I'll measure. I've been curious about low memory clojure applications :)#2020-08-2922:32dominicmI did some measuring. Http kit can run in 10 m of heap, and easily handles 22k req/s in an i7-3520M. This is two orders of magnitude above jetty which achieved 700req/s#2020-08-3005:29alekcz@U09LZR36F Thanks! that's awesome. What did you use to generate requests?#2020-08-3007:11dominicmI used wrk.#2020-08-2414:15miroHi everybody! https://github.com/mikub/titanoboa 0.9.0 is out! 🎉💥The GUI is now free also for commercial purposes. 💥 🎉 Yay! I am also contributing Rabbit MQ support (for workflow job transactions / job channel) to the OSS community version. https://github.com/mikub/titanoboa/releases#2020-08-2416:50wotbrewHi all, I am pleased to announce the first release of idx https://github.com/wotbrew/idx 🎉 0.1.0, which provides clojure(script) data structures with secondary index support. It lets you treat your existing collections like little databases. Feel free to ping me any questions. Cheers! Dan (wotbrew)#2020-08-2416:54eggsyntaxWow, very cool idea! 👏#2020-08-2418:33martinklepschreminds me of https://github.com/riverford/compound & https://github.com/keechma/entitydb#2020-08-2418:33martinklepschHow do you maintain the indexes alongside the actual data? Are they metadata?#2020-08-2418:36wotbrewhttps://github.com/riverford/compound was developed by a colleague, we have both been thinking about this problem a long time. idx wraps your collection, the indexes are just fields.#2020-08-2418:38martinklepschAh, that’s awesome! I’m a sucker for a little bit of backstory like this in readmes hahah#2020-08-2418:38eggsyntaxAh, I was wondering that too.#2020-08-2418:39martinklepsch
indexed-vector
;; => 
[{:name "fred"} {:name "ethel"}]
this snippet from the readme communicates to me that it’s still just the raw input data?
#2020-08-2418:39wotbrewIt will look, taste and smell like the original vector...#2020-08-2418:41martinklepschinteresting, sounds like black magic to me 😂#2020-08-2418:41wotbrewThe wrappers implement the interfaces clojure/cljs provide#2020-08-2418:41wotbrewHopefully that makes sense 🙂#2020-08-2418:42zaneLooks neat! I’m really glad there’s more exploration happening in this space. 🙂#2020-08-2419:28carocadHey everyone, parcera just reached v0.11.2 containing a fix for some edge cases where comments and discard is treated just like whitespaces. Special thanks to @sogaiu for the detailed report and testing https://github.com/carocad/parcera#2020-08-2509:29Lucy WangAnnouncing clj-statecharts: a state machine / statecharts library for clojure/clojurescript: https://github.com/lucywang000/clj-statecharts ". It supports most of the statecharts features. Docs is here: https://lucywang000.github.io/clj-statecharts/ It already covers most of the basics, and I plan to enrich it soon.#2020-08-2513:35jacekschaeWanted to announce a new project I have been working on — it’s a video course; how to build REST API with Clojure using Reitit, Ring, Integrant, and next.jdbc - https://www.learnreitit.com/#2020-08-2612:13plexusFunnel 0.1.42 is out. Funnel is a websocket+transit message hub meant to provide persistance of connections and discoverability for tools talking to JavaScript (ClojureScript) runtimes https://github.com/lambdaisland/funnel/releases/tag/v0.1.42 This release adds a --daemonize flag so it's trivial to run in the background, and drops the built-in certificate (use [bhauman/certifiable](https://github.com/bhauman/certifiable) if you need SSL)#2020-08-2619:01bringeCalva version 2.0.124 is out with a fixed, slightly enhanced, and documented test runner. See the https://calva.io/test-runner/ for details. Join us in #calva if you want to chat. simple_smile#2020-08-2619:10pezWhen is Test Explorer integration coming? 😃#2020-08-2619:24bringe😂 Hopefully soon enough#2020-08-2717:10ikitommi[metosin/jsonista "0.2.7"] is out! Jsonista is a fast JSON decoder & encoder on top of Jackson Databind. This version adds: • new prebuilt keyword-keys-object-mapper for easy support of Keywords keys • updateds to latest Jackson versions • ships with new JMH-based perf tests claiming it’s faster than vanilla Jackson on encoding 🤪 https://github.com/metosin/jsonista#2020-08-2717:11ikitommiif someone can share what’s wrong with the perf test setup, I’m all ears.#2020-08-2717:46seancorfieldseancorfield/depstar {:mvn/version "1.1.104"} is available -- for building JAR/uberjar files using the Clojure CLI/`deps.edn` https://github.com/seancorfield/depstar Enhancements: * Fix #37 by adding -X / --exclude to provide one or more regex used to exclude files from the JAR. * Fix #35 by providing hf.depstar.jar/run and hf.depstar.uberjar/run as entry points that can be used by the (new) Clojure CLI -X option (to execute a specific function and pass a map of arguments). * Fix #34 by adding -P / --classpath option to specify a classpath to use (based on PR #36 @borkdude). * Fix #33 by allowing destination JAR filename to appear anywhere on the command-line as well as adding a -J / --jar option for it. Documentation: * Address #31 by clarifying in the README that (:gen-class) is required for AOT. Follow-up in #tools-deps#2020-08-2717:47seancorfieldThe Clojure CLI -X option is available in prerelease builds of clojure (not the stable build) and is subject to change -- and the run functions here may also change to track that feature, if necessary.#2020-08-2718:17borkdudeA fork of this library is going to appear in babashka 0.2.0. Thanks for the lib!#2020-08-2718:22seancorfield@borkdude Is there anything I can do to the core code that will make it easier to integrate into Babashka?#2020-08-2718:24borkdude@U04V70XH6 I basically just needed to get rid of references to AOT-compilation since that doesn't work with GraalVM#2020-08-2718:25borkdude#2020-08-2718:26borkdudeNot entirely true. Now I remember. It did compile. It only bloated the binary with another 30MB. Stripping away that code solved the problem.#2020-08-2804:16Vincent Cantin@U04V70XH6 That’s a very useful release. Thank you !#2020-08-2804:36seancorfield@U8MJBRSR5 hence the 1.1 release instead of 1.0 🙂#2020-08-2819:02borkdudeBabashka v0.2.0 is out! 🎉 New features: uberjar, better error message (context, locals, stack trace), support for clojure.datafy and more! Release notes: https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v020-2020-08-28 This release is sponsored by Clojurists Together! Join #babashka to follow up.#2020-08-2819:21EugenDebian Clojure packaging BOF happening right now https://debconf20.debconf.org/schedule/venue/1/ https://debconf20.debconf.org/talks/33-clojure-packaging-team-bof/ https://pad.online.debconf.org/p/33-clojure-packaging-team-bof#2020-08-2916:59danielcomptonClojurists Together is supporting clj-kondo, Datahike, Malli, and Practicalli: https://www.clojuriststogether.org/news/q3-2020-funding-announcement/. Thanks to all our members who made this possible.#2020-08-3009:35LasCongrats @U05254DQM, your work making Clojure accessible to a wider audience is of tremendous value and importance to the Clojure community!#2020-08-3013:56practicalli-john@U7JKD4ENQ thank you for the kind words, it really helps with my daily motivation.#2020-08-3021:29uochanJust released antq ver 0.7.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Belatedly added support to check git libraries version:slightly_smiling_face:#2020-08-3102:31Chris McCormicknpm init shadowfront YOUR-APP-NAME will get you a shadow-cljs + Reagent project bootstrapped. I made this in July and apparently forgot to tell anybody about it. facepalm https://www.npmjs.com/package/create-shadowfront#2020-09-0108:33Ivar Refsdalivarref/memoize-ttl {:mvn/version "2020.09.01"} is released, a tiny library that lets you cache function return values for a dynamic number of seconds. https://github.com/ivarref/memoize-ttl#2020-09-0109:29vlaaadCool little lib! A bit off-topic, but I thought it would be nice if namespace to require was the same as maven coordinate (e.g. (require 'ivarref/memoize-ttl)). That way both in code and in tooling I would have the same identifier which is more consistent.#2020-09-0109:45Ivar RefsdalThanks for the feedback. That might make sense. I've seen different styles used, I followed https://github.com/cjohansen/clj-event-source Maybe I will change to your suggested style later. Is there a guide for this somewhere?#2020-09-0120:23Ivar RefsdalI've implemented your suggestion @U47G49KHQ, thanks for the input!#2020-09-0110:32slipsethttps://github.com/clj-commons/clj-yaml version 0.7.2 was just released. Bumping of underlying libs and exposing some more config options.#2020-09-0110:40borkdudeCool, will bump in next babashka release!#2020-09-0218:01blueberryNeanderthal 0.36.0 released! High-speed vector, matrices, and linear algebra in Clojure on CPU & GPU! Supports Intel, Nvidia, and AMD! http://neanderthal.uncomplicate.org#2020-09-0220:34tony.kayThanks to the initial work of @mdhaney and the continued polishing by @tylernisonoff we now have Datomic Cloud support in the RAD Datomic adapter. I’ve released version 1.0.0 of fulcro-rad-datomic, and the fulcro-rad-demo now has a datomic-cloud branch that demonstrates the support. https://github.com/fulcrologic/fulcro-rad-datomic https://github.com/fulcrologic/fulcro-rad-demo/tree/datomic-cloud#2020-09-0313:17RobWe are open-sourcing Sequence! it’s an early version, but solves a lot of problems I had working for fintechs companies. I published some of the design on this blog post: https://decimals.substack.com/p/things-i-wish-i-knew-before-building (also linked in the readme) https://github.com/decimals/sequence#2020-09-0407:50jeroenvandijkNice 🙂 @U010WB5T5EW What is the licence of this project?#2020-09-0411:27Rob@U0FT7SRLP thanks for noticing! just added, Apache 2.0#2020-09-0709:40vncz@U010WB5T5EW Nice, it looks like you're using Stoplight to document the API of the project 🙂#2020-09-0709:56vncz@U010WB5T5EW I've designed and implemented Prism: https://github.com/stoplightio/prism#2020-09-0713:43RobHey @U015VUATAVC, great meeting you. I love Stoplight and all the OSS projects#2020-09-0807:52vncz@U010WB5T5EW Sweet. Help me convince the company to switch to Clojure troll#2020-09-0821:15RobI tried to make my last employer switch too, they didn’t, so I left, created my own company and it’s all Clojure now :rolling_on_the_floor_laughing:#2020-09-0910:18vnczI wish I'd be brave enough as you were 🙂#2020-09-0313:46danielszI hope you'll enjoy reading my latest blog post on Meyvn, if only for the historical tidbits around Clojure tooling. "When we we say that Clojure is hosted on the JVM, we often forget the corollary, that Clojure tooling is built on Maven. We'd be forgiven for the oversight: the tooling is good at keeping Maven out of sight. But Maven is everywhere: in Clojars as the repository format, in Boot where Pomegranate is used as the interface for the Maven resolver, in `tools.deps` which harnesses the Maven resolver directly... Meyvn takes the ubiquity of Maven to its logical conclusion, delegating all tasks to Maven's execution engine." Oh, and did you ever wonder where Leiningen gets its name from? https://danielsz.github.io/blog/2020-09-01T1556.html.#2020-09-0314:09danielszOh, sorry about that. Thanks!#2020-09-0416:50Alex Miller (Clojure team)A new prerelease version of clj is now available (1.10.1.672): • See https://insideclojure.org/2020/09/04/clj-exec/ • -X now supports multiple aliases, aliases with other argmap options like :extra-deps, and ad hoc functions • new argmap alias keys :ns-default and :ns-aliases can be supplied to make using ad-hoc functions simpler • -M is now used to invoke clojure.main, also supports aliases with other argmap options • -P is a new option to "prepare" your execution (download deps, cache classpath etc, but not exec) - useful for dryrun-esque capability particularly when preparing containers etc • -R, -C, -T, -O have been removed (use -X, -M or -A for repl invocation instead) • argmap keys :deps/:paths have been renamed to :replace-deps/:replace-paths (old will still work in deprecated mode for a while, but not forever) • argmap keys for -X :fn and :args were renamed to :exec-fn and :exec-args • -Stree, -Spom, and -Sresolve-tags are now programs you invoke with -X on the built-in :deps alias: -X:deps tree, -X:deps mvn-pom, -X:deps git-resolve-tags Also, the mvn local install program is now similar -X:deps mvn-install. These are all leveraging the new :ns-default arg. • Docs for all this stuff can be found in a https://clojure.org/reference/deps_and_cli_prerelease which will exist until this is the next stable version, hopefully soonish • Feedback welcome in #tools-deps before this gets promoted to stable!#2020-09-0510:51Eugene Koontzhttps://github.com/ekoontz/wikiparse/blob/master/README.md, a library for retrieving wiktionary pages from wiktionary dumps#2020-09-0511:24practicalli-johnMonthly update of Library versions for practicalli/clojure-deps-edn, a collection of aliases and tools to support Clojure development across all your projects. The :outdated alias in practicalli/clojure-deps-edn is used to run antq to get the latest Maven-style versions as well as the latest GitHub SHA commits. Full details are in the http://CHANGELOG.org (I use org as antq prints out a table of current and latest versions and org-mode can manipulate ascii tables easily) https://github.com/practicalli/clojure-deps-edn/commit/46d48e5fb814fd8da9c233d5c6cf83bc33358bd8#2020-09-0713:41tvaughanHi @U05254DQM. I'm the author of kibit-runner. I've turned off notifications for most of my github and gitlab projects. I do check them occasionally, but if there's ever a problem that needs quick attention feel free to @ me here#2020-09-0611:28Karol WójcikFirst release of cljss-react-jss v0.0.1: https://github.com/FieryCod/cljs-react-jss Library provides interop between css-in-cljs & react-jss. For now only Higher Order Components API is supported. SSR & regular client side styles generation works fine Example: https://github.com/FieryCod/cljs-react-jss/blob/master/src/dev/css_cljs/repl/rum.cljs Feedback welcome :)#2020-09-0801:01Lucy WangHow does it compare to https://github.com/khmelevskii/emotion-cljs ? I took a brief look and it looks like cljs-react-jss supports reagent component, but emotion-cljs only supports react components defined in js (e.g. material-ui). Cool!#2020-09-0805:15Karol Wójcik@UP90Q48J3 Don’t know much about emotion-cljs. My motivation was to have fully working solution for both SSR on Node server and client side css generation. I wanted it to be as thin layer as only possible so I could transfer all the hard stuff on peeps from react-jss which is mature enough library. Therefore css-in-cljs is like react-jss but for cljs. HoC API is fully supported and it should work just fine. On the other hand there is still hook API to be implemented which is kinda experimental thing for Reagent, so I resist to implement it now. #2020-09-0706:43seancorfieldseancorfield/clj-new {:mvn/version "1.1.215"} -- Generate new projects from Leiningen or Boot templates, or clj-template projects, using just the clj command-line installation of Clojure! -- https://github.com/seancorfield/clj-new * Support upcoming clojure -X option by providing clj-new/create and clj-new/generate as entry points that can be used to execute a specific function and pass a map of arguments. (#41) * Update to depstar 1.1.104 in templates (which also includes clojure -X support). * Update to tools.deps.alpha 0.9.782 and use the runtime basis instead of trying to read the default deps.edn files. (#42) All follow-up to #clj-new (yes, a new channel, so we don't clog up #tools-deps with discussion about clj-new, or depstar, which also has its own channel now: #depstar )#2020-09-0713:25Vincent CantinThat’s great !#2020-09-0913:54borkdudeClj-kondo v2020.09.09 New features: parallel linting, ignore hints, home config, config-paths Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20200909 This release is funded by Clojurists Together. Follow up in #clj-kondo. Happy linting!#2020-09-1003:03tony.kayI’m happy to announce the release of Fulcro 3.2.16. This version adds a new plugin to support completely synchronous operation (sans remotes) which can be used to improve regular application performance, but can also be used to enable trivial full-app testing that has no asynchrony even in js. It also removes some internal debugging logic that was unnecessary and affected dev-time performance. See the new chapter in the book at: http://book.fulcrologic.com/#_synchronous_operation https://github.com/fulcrologic/fulcro#2020-09-1006:32orestisI’m finally in a position to announce Reseda, a Clojure-y state management library for modern React. It’s based on a light-weight subscription store on top of plain Clojure atoms, and enabling Suspense use even in stable React. See more at https://github.com/orestis/reseda, discuss and follow up in #react#2020-09-1013:58athomasoriginalVery cool!#2020-09-1106:29StefanVery cool indeed, I’m going to remember this for sure!#2020-09-1013:22jacekschae🚀 Learn Reitit is OPEN for ENROLLMENT 🥳 First videos will be available 21 Sep 2020 🎥 You can signup here — https://www.LearnReitit.com If you bought any PRO coursers before there is an additional discount — check you email!#2020-09-1015:24Michaël SalihiGreat, can't wait @U8A5NMMGD! 🙂 In the meantime, maybe my version of @U04V70XH6's usermanager can be useful for some who want see an example and anticipate the libraries that are used in your video lessons. Worth what it's worth, I put that there: https://github.com/PrestanceDesign/usermanager-reitit-integrant-example#2020-09-1119:18chuckleheadas a previous purchaser: if I haven't seen any emails regarding discounts, should I be concerned or just more patient? 🙂#2020-09-1123:21tbrookeI received an Email about a discount you should have received one#2020-09-1105:29conjunctiveI released a small library for generating CSV files of randomized dates. There's heavy use of spec, transducers, and cgrand's beautiful library https://github.com/cgrand/xforms! https://github.com/conjunctive/date-gen#2020-09-1107:08conjunctiveThanks @U8MJBRSR5! Apologies for accidentally deleting your reply. Yes, I originally wrote it to test another project I was working on, but decided to extract it into a small exploratory repo.#2020-09-1114:22uwoalways great to see cgrand's library in the wild! It should really be de rigueur!#2020-09-1105:51djblueportal 0.5.0: It's a clojure tool to navigate through your data like REBL. The main highlights for this release are: - You can pull values back into your repl from portal via deref or @ - The table viewer now has sticky headers and columns - For more info https://github.com/djblue/portal/blob/master/CHANGELOG.md#050---2020-09-10#2020-09-1107:03chuckleheadI don't need JavaFX, this is great!#2020-09-1113:22Eddú MeléndezHi everyone, couple of months ago I started building a builpack for leiningen and it has been donated to paketo-buildpacks` With just one command the builpack will autodetect is a leining project, provid an jdk, provide lein, provide some adjustment to the jvm and create the image. At the end, you can run it with the docker commands you already know. https://github.com/paketo-buildpacks/leiningen In order to create an image with java 8 (if version is not specified will be java 11): pack build hello-pedestal --builder paketobuildpacks/builder:base -e 'BP_JVM_VERSION=8.*' https://asciinema.org/a/357310 You can also change the jdk provider pack build hello-pedestal --builder paketobuildpacks/builder:base --buildpack --buildpack -e 'BP_JVM_VERSION=8.* https://asciinema.org/a/357418 For java 11, the work around is to start it with --env JAVA_OPTS="-XX:MaxMetaspaceSize=104744K" for now.#2020-09-1118:48Alex Miller (Clojure team)A new prerelease version of clj is now available (1.10.1.681): • Reinstate -R, -C, and -Spom from last week's prerelease (but still deprecated) • TDEPS-155 - Some error message improvements for various bad coordinate cases • Feedback to #tools-deps #2020-09-1212:22blueberryDeep Diamond 0.15.0-alpha released! https://github.com/uncomplicate/deep-diamond#2020-09-1222:59uochanJust released vim-iced ver 2.2.0, Clojure Interactive Development Environment for Vim8/Neovim. Now supports #clj-kondo static analysis! clj-kondo https://twitter.com/uochan/status/1304916698827382784#2020-09-1313:33dominicmI made a little CLI tool for displaying duplicates on the classpath: https://sr.ht/~severeoverfl0w/clj-classpath-duplicates/ Frequently duplicates are undesired, and lead to very confusing bugs. This tool can be used as part of a CI process to identify the introduction of duplicate files.#2020-09-1407:37rickmoynihan:thumbsup: FYI it looks like this doesn’t work on java8 due to: https://git.sr.ht/~severeoverfl0w/clj-classpath-duplicates/tree/master/src/io/dominic/clj_classpath_duplicates/core.clj#L38#2020-09-1407:46dominicmYeah, I spotted that toy and decided to be lazy. It's such a convenient thing...#2020-09-1407:46dominicmI should just write a read/drop loop though...#2020-09-1407:47rickmoynihanYeah I hadn’t seen it before, a nice addition to jdk11 for sure#2020-09-1509:32borkdudeOnline terminal REPL implemented with xterm.js + the small clojure interpreter: https://babashka.org/xterm-sci/ source: https://github.com/babashka/xterm-sci I'm sure there are a few input/output handling edge cases. Feel free to follow up in #sci. Thanks to @plexus for the idea.#2020-09-1704:49EugenLooks awesome @plexus . Congrats. What was the use case for building it?#2020-09-1706:57borkdudeIt can be used to showcase your CLJS libraries in a terminal setting.#2020-09-1707:18Eugenthanks. From what I read it seems that I could implement a scripting terminal to my clojure / java app and expose the internals (spring beans, etc) ? Use cases would be - level 3 support, changing app behavior at runtime or doing one off scripts that are not yet exposed via api#2020-09-1707:21Eugen@U04V15CAJ: Regarding your use case: can I load clojurescript libraries dinamically in the terminal running in my browser ?#2020-09-1707:24borkdude@U011NGC5FFY Not like that. Right now you would have to compile your library along and connect it into the sci options: https://github.com/borkdude/sci And then host it somewhere.#2020-09-1707:25borkdudeBut sci can be used for the things you mentioned.#2020-09-1707:25borkdudeThere is a REPL example in the examples dir of sci#2020-09-1707:26borkdudeBut there is also babashka.nrepl which can be used to expose an nREPL server to your sci environment.#2020-09-1707:27Eugenthanks, I love that about it. I was looking for a language that is safe to embed in an back-end app to expose internal services for maintenance operations not yet implemented in API#2020-09-1707:29borkdudeyes. it's safe in the sense that you control what people can execute#2020-09-1707:30borkdudewe also have some options to restrict infinite seqs#2020-09-1707:30EugenI will check that one up as awell, thanks. I would like to offer my appreciation for your help with clojure and in general. You are awesome and if you ever think I can help, just let me know.#2020-09-1707:31borkdudebut it's still possible to craft examples that will run for a long time - we haven't quite solved that problem https://github.com/borkdude/sci/issues/348#issuecomment-692985383#2020-09-1707:32borkdudea solution would be to run this within a thread and just kill the thread after some timeout#2020-09-1707:32borkdudeon the JVM that is. The same solution is taken by nREPL when you press ctrl-c.#2020-09-1707:33borkdudein the browser this is more difficult#2020-09-1707:35Eugenhave you looked at web assembly? I don't know if it makes any sense (just started reading about it). https://dzone.com/articles/webassembly-threads-in-firefox WebAssembly works in most modern browsers> Not sure if clojurescript could be made to work with web assembly (don't know about garbacge collection). But if it can, we can have a very powerfull clojre / clojurescript experience .#2020-09-1707:36EugenWebAssembly does support threads and can be called from JS.#2020-09-1707:36Eugenbrowser support seems good https://caniuse.com/?search=webassembly#2020-09-1707:58borkdudeThere's also webworkers, but I don't think they can access the dom#2020-09-1707:58borkdudeThe execution length problem is more or less only a problem for scripts you don't control#2020-09-1707:58borkdudeI guess the worst thing that could happen is that your browser freezes#2020-09-1707:59Eugen🙂 for running things in browser yes, but for using sci on back-end via xterm.js ...#2020-09-1708:00borkdudelike I said, then you can run things in threads which you can kill on timeout#2020-09-1708:00Eugenneither web workers nor web assembly can access dom. they need to do that via JS.#2020-09-1708:00EugenJS can call functions in WebAssembly and web Assemly can call JS so there is a lot of room for how to do that#2020-09-1708:01borkdudecool. well, if you want to figure this out, that'd be cool#2020-09-1708:12EugenI'll look into it when I have a more concrete use case. Right now I'm just exploring WebAssembly. They do have an open spec for GC https://github.com/WebAssembly/proposals/issues/16 and a v1 implementation https://github.com/WebAssembly/gc . I think it would be worth exploring having a clojure version on web assembly once GC is in place.#2020-09-1708:31borkdudeThe concrete use case for this is interpreting scripts from other users in something like https://github.com/athensresearch/athens#2020-09-1708:32borkdudeMaybe @U0FT7SRLP can you tell more about it#2020-09-1708:41EugenI'm a bit ashamed to admin it's not clear what Athens does. I've looked at the github page and some other docs and as a new commer I have no idea what it does. Does it make beer 😄?#2020-09-1708:49borkdudeIt's something like Roam. I have used neither myself. https://roamresearch.com/#2020-09-1708:53EugenI just read the description of Roam and I think I understand what it does. I've been looking for something like this to start a journal 🙂 . I'll check it out#2020-09-1708:57Eugenbtw, WebAssembly source looks very much like a LISP https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md . https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format#2020-09-1709:17jeroenvandijk@U011NGC5FFY Regarding the (potential) power of Sci, yes Athens or Roam are future potential use cases, allowing for safe third party extensions. Sci/Clojure is a lot easier to contain than Javascript is, and a much better programming model. For current inspiration, I would look at https://observablehq.com/ this only supports javascript, but imagine a Sci variation. I think this is basically what (a part of) Athens could be#2020-09-1709:19Eugenthanks, looks very interesting (and nice)#2020-09-1709:35jeroenvandijk@UUY06DFL5 Might be able to explain Athens or it’s current status a bit better :)#2020-09-1709:45EugenI'm curios about that. I'm working to grow a clojure company and I'm looking for an intranet tool. Not sure if Athens fits this profile yet.#2020-09-1710:10jeroenvandijkI think the important things that are still missing are persistence and an authorization layer. So probably not a good fit yet, if that’s not the core of your product at least#2020-09-1717:47plexusThe original use case for this (and one we may still pursue) is to add a drop down repl to lambda island, and to offer various features and customizations over time via the repl#2020-09-1717:48plexusTo answer your question @U011NGC5FFY#2020-09-1717:49borkdude@plexus Made various improvements to the babashka/xterm-sci. Single quotes work. Pasting multiple sexprs. Dealing with incomplete input. Println, prn, pr, etc.#2020-09-1717:50borkdudeIt depends on a fork of local-echo: https://github.com/babashka/local-echo#2020-09-1717:50borkdudeAlso made a PR to the original one, but they're not fast to respond#2020-09-1719:27jeff tangRoam allows arbitrary css, js, html, and even some hiccup and datalog. This is fun because it opens up user customization and programmable apps. But it's of course not as secure! This is why JS execution in Roam has this UI https://roamresearch.com/#/app/help/page/3l_9j6aAv#2020-09-1719:29jeff tangMy hope is that Athens will have a plugin system that is both powerful (arbitrary code), but also safe, so something like sci would be great. But it's not a priority atm. hope that helps @U011NGC5FFY#2020-09-1719:37borkdude@UUY06DFL5 I think the warning is great. Even with sci we cannot guarantee the length of execution time currently, but maybe allowing users to flag scripts as malicious or something would help in that regard.#2020-09-1516:20plexusJDK 15 general availability https://mail.openjdk.java.net/pipermail/announce/2020-September/000291.html#2020-09-1516:40dominicmAnything exciting in JDK15 anyone knows of? I've not followed along really.
#2020-09-1516:42orestisNashorn is truly removed #2020-09-1516:42orestisZ1 is stable #2020-09-1516:49seancorfieldMulti-line strings with """#2020-09-1516:49seancorfield(that's Java language, not JVM, so not useful to us)#2020-09-1516:49seancorfieldAnd we should probably follow-up in #java#2020-09-1516:51dominicmhttps://www.techgeeknext.com/java/java15-features I'll probably look at 12/13/14 too as I didn't follow those either as I only am interested in lts versions. Not sure if they are rolled up or not.#2020-09-1516:57dominicmI know we won't see clojure using this for a long time, but anonymous classes seem like they might be really handy https://openjdk.java.net/jeps/371#2020-09-1517:03dominicmLooks like this isn't the LTS release. That'll be 1 year from now.#2020-09-1517:06seancorfieldI thought 17 is the next LTS?#2020-09-1517:10dharrigan6 month release cycle, so 16 is next, then 17 in 1 year which is LTS.#2020-09-1704:44EugenThere are some interesting projects in JVM / JDK land. Loom and Valhalla are probably the most interesting https://openjdk.java.net/projects/loom/#2020-09-1704:45EugenLoom aims to bring tail call elimination. Looking forward to seeing that.#2020-09-2504:15emccueThe devs have been pretty vocal about "LTS" not meaning anything to them#2020-09-2504:15emccueSo the latest version is the best supported version - LTS is arbitrary based on whatever companies want to do with regards to paid support#2020-09-2506:07orestisYes and no - eg. on AWS it’s nice to know that Amazon will apply security fixes to Coretto for a long time. #2020-09-2508:05dominicmThe clojure devs feel differently :)#2020-09-2508:05dominicmClojure only officially supports lts the#2020-09-2516:31seancorfieldWell, "officially support" is open to interpretation. Clojure itself is tested against 8, 9, 10, 11 right now (Oracle and OpenJDK versions) per https://build.clojure.org/job/clojure-test-matrix/#2020-09-2517:46dominicmI'm surprised by 9/10.#2020-09-1520:49tony.kayI’m pleased to announce Fulcro 3.3.0. This release has a few new tools that make hot code reload even better. In prior versions a change to a query when using dynamic queries would not be properly seen if nested. This new version provides a function you can call as part of your hot reload refresh that will scan for changes like that and fix them. https://github.com/fulcrologic/fulcro http://book.fulcrologic.com/#_hot_code_reload_and_dynamic_queries#2020-09-1522:48cjmurphyFulcro RAD now has another possibility for storage: Key Value stores (in general). The repository is setup as another RAD Demo, just to demonstrate it all working. Please take a look: https://github.com/fulcrologic/fulcro-rad-kvstore#2020-09-1704:44EugenThere are some interesting projects in JVM / JDK land. Loom and Valhalla are probably the most interesting https://openjdk.java.net/projects/loom/#2020-09-1607:26vlaaad#reveal 1.0 is released! Reveal is a Read Eval Visualize Loop for Clojure https://vlaaad.github.io/reveal/#2020-09-1615:25wilkerluciothis is great! I'm having a lot of fun playing with, thanks for this! also great docs, kudos for all the gifs :thumbsup:#2020-09-1616:19vlaaad^_^#2020-09-1617:35markusNice!#2020-09-1620:05Karol WójcikIs it possibile to use it alongside cljs?#2020-09-1620:18vlaaad@UJ1339K2B Reveal is pretty closely tied to JVM. It can talk to remote processes via prepl — https://vlaaad.github.io/reveal/#remote-prepl — but it's exploration capabilities will be limited to inspecting data that arrived over the network.#2020-09-1620:33Karol WójcikThank you @U47G49KHQ #2020-09-1720:12JorinHi, while not strictly Clojure, I think this might be interesting for you if you touch Node.js or browsers. I created a EDN parser and generator for JS. Why? I needed a parser that allows streaming EDN data in Node.js, and I also wanted TypeScript support and I wanted to work with plain data in the JS world. If this sounds interesting to you, check it out: https://github.com/jorinvo/edn-data I am happy about any feedback or help improving the project 😊#2020-09-1720:34borkdudeVery cool!#2020-09-1806:11JorinThank you :)#2020-09-1721:08wilkerlucioI'm pleased to announce that I'm working on a new version of Pathom! The project still in progress, today Im here to announce the post with details about it, you can check it at https://wilkerlucio.github.io/pathom-3-is-coming/. The source for the new Pathom is available at https://github.com/wilkerlucio/pathom3. Its a WIP, don't use yet.#2020-09-1802:23Vincent CantinThis looks awesome. I will use it in my framework.#2020-09-1721:56borkdudedynaload 0.2.2: better support for GraalVM binaries and LazyVar now implements IFn https://github.com/borkdude/dynaload#graalvm#2020-09-1811:30refsetCrux 1.12 is out! Featuring: aggregates, predicate destructuring, subqueries, a revamped module config system and Azure Blob document storage (generously contributed by @luposlip 🙏). More details over on #crux and on GitHub https://github.com/juxt/crux/releases/tag/20.09-1.12.0#2020-09-2120:04mauricio.szaboJust published a new version of socket-repl package for Atom - Chlorine. This version is just bugfixes, but are some new features that can be interesting, for example, to render a hiccup-like tag :div/clj and :div/ansi that will use Chlorine's renderer for objects (or a text that will convert ansi codes to HTML). This means that you can, for example, run a test code and instead of the "default Clojure result" that you'll see in the REPL, you can render the test result in any way you want. Here's an example: https://gist.github.com/mauricioszabo/c2a756d5f5e363f6539cdad212815df1 More information on #chlorine channel 🙂#2020-09-2123:44uochanJust released vim-iced ver 2.3.0, Clojure Interactive Development Environment for Vim8/Neovim. https://github.com/liquidz/vim-iced Renaming symbols is suppored! Thank you so much, @nbardiuk !#2020-09-2211:35practicalli-johnA great addition to the family of Clojure editors and great to see even more support with Vim. I've include links to vim-iced in my collection of suggested Clojure editors https://practicalli.github.io/clojure/clojure-editors/#vimiced Thank you for all the work on this (and you other projects).#2020-09-2202:25Alex Miller (Clojure team)clj 1.10.1.693 (prerelease) is now available: • Classpath ordering changes. Classpath will always now be ordered extra-paths, paths, then libs. Libs are ordered by tree depth, then alpha. These changes both revert some ordering changes in the last stable release and go further in defining a reproducible classpath order. • clj -Stree re-enabled for now while we decide on best way to convey classpath-changing options to -Stree and -Spom • Windows scripts updated to latest • This prerelease version should be considered a release candidate for the next stable version! If you try it and have feedback, please leave it in #tools-deps #2020-09-2213:25bruno.bonacciHi all, i’ve just released https://github.com/BrunoBonacci/mulog v0.5.0 with the following changes/fixes • new Prometheus publisher (thanks @brandon746) • Now with 10+ publishers • fixes to namespace tracking (thanks @ddouglass) • Zipkin publisher support for external trace ids • Updated dependencies. Online doc on cljdoc: https://cljdoc.org/d/com.brunobonacci/mulog/0.5.0/doc/readme#2020-09-2213:36athomasoriginalNice! I’ve been working on a new CLJ/S project and have configured my logging, but this has me curious. Do you see this used in combination with something like clojure.tools.logging or as a replacement? The “Motivation” section of your docs has me thinking they work together. Apologies if this is not a great place to start this convo. Let me know if there is a better place. Thanks again, the library looks great!#2020-09-2213:42bruno.bonacciHi, in https://cljdoc.org/d/com.brunobonacci/mulog/0.5.0/doc/f-a-q-#q-can-i-use-%CE%BClog-as-the-sole-logging-library-and-send-my-traditional-logging-to-it I discuss my point of view on this.#2020-09-2213:43bruno.bonacciTL;DR> Although possible, there are even supporting libraries, is something that in the general case I wouldn’t recommend. But every case is different so you are free to try and see how does it work for you.#2020-09-2214:18athomasoriginalGreat. I can see this as a nice way to instrument the code with metrics and not be bound to a single provider library like iapetos - (Not a knock against this library - it works well)#2020-09-2217:44just.sultanovA simple response unifier v0.1.0 has been released. The next generation of clj-unifier. Any feedback welcome. https://github.com/anywhere-ninja/unifier#2020-09-2222:08eggsyntaxFor what it's worth, I don't really know what a response unifier is or why I would want one, and I didn't really feel clearer on it after looking at the readme 🤷#2020-09-2306:08just.sultanov@U077BEWNQ thank you for the feedback. I added rationale to the readme#2020-09-2306:17sogaiui feel more informed by this addition -- ty!#2020-09-2311:38eggsyntaxThanks!#2020-09-2313:31tony.kayI just released updates to two Fulcro libraries: Fulcro 3.3.5: Mainly minor issue fixes. There is a new react error boundary helper that was released in a non-announced version. Fulcro Spec 3.1.8: Fixes a few minor issues with terminal reporter (now shows compiler errors, and improvements for color schemes) https://github.com/fulcrologic/fulcro https://github.com/fulcrologic/fulcro-spec#2020-09-2317:14alekczFire v0.3.0 is out! No more dependency on the Google Java SDK. Enjoy Firebase's RTDB with some lightweight Clojure goodness. It's compatible with GraalVM too, so #babashka here we come! https://github.com/alekcz/fire#2020-09-2415:19wilkerlucioHello everyone, today I'm releasing [com.wsscode/js-interop "0.0.1"], this library provides an alternative way to read CLJS data structures from JS using JSON-like interface. Check more details at the release post https://wilkerlucio.github.io/alternative-to-clj-js/, and I open a discussion space on Clojureverse https://clojureverse.org/t/an-alternative-to-clj-js/6591. Library code at https://github.com/wilkerlucio/js-data-interop. Cheers!#2020-09-2417:35mkvlrare you aware of https://github.com/applied-science/js-interop ?#2020-09-2421:20wilkerluciohello, no, wasn't aware, seems a nice library for dealing with JS obj directly, the thing I'm doing is quite different with JS proxy, do you think the name is an issue?#2020-09-2504:58sergey.shvetsI also use https://github.com/mfikes/cljs-bean for pretty much all my projects.#2020-09-2511:53mkvlr@U066U8JQJ not sure, maybe a renaming the artifact to com.wsscode/js-data-interop to unify with the github repo if it’s not too much work? But also not a big deal I think, guess it’s what namespaces are for.#2020-09-2514:34wilkerlucioI'm not attached to the name, I'll change to js-data-interop in a next release to reduce confusion 👍#2020-09-2513:27borkdudeBabashka, a native scripting env for Clojure, v0.2.1 released: - http-kit client + server - support for implementing IDeref and IAtom - clojure.pprint/cl-format and multiple fixes and enhancements. Thanks @cljtogether for sponsoring this release. Release notes: https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v021-2020-09-25 Visit #babashka for questions.#2020-09-2518:45Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.1.697 is now available (this is a release, NOT a prerelease) • Added https://clojure.org/reference/deps_and_cli#_executing_a_function (-X) • Added https://clojure.org/reference/deps_and_cli#_prepare_for_execution (-P) • Expanded https://clojure.org/reference/deps_and_cli#_running_a_main_or_script (-M) to support all argmap arguments • Added new argmap attributes for https://clojure.org/reference/deps_and_cli#namespaces: :ns-aliases and :ns-default • Added new https://clojure.github.io/tools.deps.alpha/clojure.tools.cli.api-api.html available via -X:deps alias (git-resolve-tags, mvn-install, mvn-pom, tree) • Deprecated -R, -C (use -X, -M, or -A instead) • Deprecated unqualified lib names in deps.edn (use fully qualified lib names) • Deprecated alias tool args :deps and :paths (use :replace-deps and :replace-paths) • Removed -O (use -X, -M, or -A) • Removed -Sresolve-tags (use -X:deps git-resolve-tags) • https://clojure.atlassian.net/browse/TDEPS-152 - Fixes to -Spom generation with srcDirectory • https://clojure.atlassian.net/browse/TDEPS-155 - Better error handling for bad coordinates • https://clojure.atlassian.net/browse/TDEPS-167 - Handle absolute resource paths in pom deps • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.9.810#2020-09-2519:14Alex Miller (Clojure team)https://clojure.org/releases/devchangelog#v1.10.2-alpha2 is now available • https://clojure.atlassian.net/browse/CLJ-2571 Add Throwable return type hint to ex-cause • https://clojure.atlassian.net/browse/CLJ-2572 Avoid reflection in clojure.data • https://clojure.atlassian.net/browse/CLJ-2295 Eliminate duplicate doc string printing for special forms • https://clojure.atlassian.net/browse/CLJ-2564 Improve error message for casehttps://clojure.atlassian.net/browse/CLJ-2580 Fix case expression branch analysis that resulted in compilation error • https://clojure.atlassian.net/browse/CLJ-2469 Fix errors in printing some maps with namespace syntax#2020-09-2521:13seancorfieldhttps://github.com/seancorfield/readme 1.0.16 is available -- now auto-creates directories in the specified test path if necessary and exits with a non-zero status if the generated test file cannot be required (due to errors in your readme code, for example)#2020-09-2521:23rickmoynihan👌 very nice — I’ll not need to use org-mode for things like this now#2020-09-2608:25raymcdermottYet another place to enjoy Clojure things... We are starting to host the  apropos-clojure  live stream on Discord as of the next episode on Wed 30th Oct 2000 CEST Here is an invite link that will not expire: https://discord.gg/39DHbU8 We will continue posting the recordings on YouTube for folks that can't or don't want to join live. Hope to see you there Ray#2020-09-2614:57borkdudeReleased deps.clj 0.0.10, a 100% Clojure port of the Clojure CLI https://github.com/borkdude/deps.clj/releases/tag/v0.0.10 Parity with Clojure Tools 1.10.1.697#2020-09-2617:40practicalli-johnMajor change to the Practicalli Clojure deps.edn user wide configuration for Clojure CLI Alias names are now qualified, using the pupose as the name, e.g. :project/new and :project/outdated . This makes alias names shorter whilst still conveying their use across all projects. Examples of using aliases with the new -M and -X flags (where supported) have bee added and all instances of the -A flag have been deprecated or replaced. The -M flag replaces all previous uses of -R and -A. Library versions used in all aliases updated as of today, 26th September 2020, using the :project/outdated alias that runs the very useful antq library. https://github.com/practicalli/clojure-deps-edn#2020-09-2703:31tony.kayA pre-release version of the new Fulcro Inspect for Chrome has been released as a zip file you can install into Chrome (the store version will be held at the current version for a while). This version uses an improved db sync protocol that reduces dev time overhead, and doesn’t get out of sync as easily (should not fail at all). This version also includes an improved experience with custom transit types, and EQL tab that can run mutations properly, and revives the Element Picker tab. This version REQUIRES Fulcro 3.4.0+ (which is only released as a SNAPSHOT so far). https://github.com/fulcrologic/fulcro-inspect/releases/tag/chrome-3.0.0-RC1#2020-09-2915:46Alex Miller (Clojure team)FYI, I'm taking https://ask.clojure.org down for some maintenance today (wasn't sure where I should post this, sorry admin!)#2020-09-3007:50sylvainHello everyone. I've just made the first release of [ageneau/blossom "0.1.1"]. This library implements Edmonds's blossom algorithm for maximum weight matching in undirected graphs. The code is at https://github.com/ageneau/blossom. Feedback / comments welcome !#2020-09-3007:51martinklepschOmg, I’ve been close to attempting this a few times, amazing! #2020-09-3007:52martinklepschIs this Blossom or Blossom V? And remind me, does blossom support matching groups bigger than 2?#2020-09-3008:00sylvainIt works for non-bipartite weighted graphs. It's not blossom V (Blossom V refers to https://pub.ist.ac.at/~vnk/papers/blossom5.pdf right ? ). It's based on Galil's paper: http://www.cs.kent.edu/~dragan/GraphAn/p23-galil.pdf#2020-09-3008:07martinklepschCool! #2020-09-3008:11martinklepschVery curious to hear more about what you’re using this for if you don’t mind sharing ☺️#2020-09-3008:18sylvainI had plans to make a swiss pairing system for chess tournaments.#2020-09-3016:57blueberryNeanderthal 0.37.0 released! Clojure fast vector, matrix, & linear algebra library. Now automatically detects Apple's OpenCL platform and work around the bugs in the driver. http://neanderthal.uncomplicate.org This https://twitter.com/hashtag/opensource?src=hashtag_click work is funded by 2 books! Subscribe at https://aiprobook.com and read 500 pages that are already available now.#2020-10-0111:39blueberryCUDA 11 support in new ClojureCUDA 0.11.0 release! http://clojurecuda.uncomplicate.org https://github.com/uncomplicate/clojurecudahttps://t.co/VtzDRQ6ozo?amp=1 http://aiprobook.com#2020-10-0111:59timo#2020-10-0114:39rutledgepaulvCreated a piece of ring middleware for implementing ip-based access to a clojure app (or sections of an app). Feedback welcome! https://github.com/RutledgePaulV/ring-firewall-middleware#2020-10-0114:56vnczhttps://github.com/RutledgePaulV/ring-firewall-middleware/blob/master/src/ring_firewall_middleware/core.clj#L68 @U5RCSJ6BB Use constantly ?#2020-10-0114:58rutledgepaulvcertainly could! sometimes i think defining the signature helps communicate the shape of the thing for people who choose to implement their own#2020-10-0118:38fjolnevery helpful README 🙏:skin-tone-2: #2020-10-0213:09magraVery nice! That opens up the possibility to place fine grained source-ip security for different routes.#2020-10-0213:40rutledgepaulvYeah, that's my primary use case. Restricting admin or prometheus metric endpoints on a public application.#2020-10-0200:37bbrinckI just released Expound 0.8.6. The main change is that it supports the new rewrite of Orchestra (i.e. version 2020.07.12-1 and above) https://github.com/bhb/expound#2020-10-0206:36flowthingI've been working on a Sublime Text 4 package for editing Clojure called Tutkain. If you'd like to give it a go, see https://tutkain.flowthing.me. (You'll need a Sublime Text license.)#2020-10-0213:34vnczIs there Sublime 4 @U4ZDX466T#2020-10-0213:37flowthingYes, but it’s currently in alpha. You can use it if you have a Sublime Text 3 license. Check out the Disclaimers section behind that link for a bit more info — there’s a link to the changelog and the Discord where you can find the download links.#2020-10-0213:38vnczThanks, I'm very curious about it#2020-10-0213:38vnczLooks like there's a lot of good stuff. Would love to get back to Sublime for development!#2020-10-0213:39flowthingWell, for what it’s worth, I’ve really been enjoying it so far.#2020-10-0213:39vncz@U4ZDX466T Is the project on GitHub or something we can take a look at? I do not have a Sublime Text 3 license, so I can't really try it 😞#2020-10-0213:42flowthingThere’s a GitHub link in the sidebar at https://tutkain.flowthing.me. But yeah, it’s at https://github.com/eerohele/Tutkain.#2020-10-0213:42vncz@U4ZDX466T Sorry, it's 8AM here, I haven't been caffeinated enough. I'll stop with the stupid questions 😄#2020-10-0213:43flowthingNo worries at all. 🙂 I’m happy to hear I’m not the only Sublime Text enthusiast around.#2020-10-0220:41tony.kayFulcro 3.4.2 is on clojars. Primarily improvements to dynamic routing namespace. • Ability to change routes relative to an unknown parent • Changed order of routing instructions to be depth first to reduce/eliminate flicker • Fixed problem where relative routing could be denied by router that was not being affected (relative route change could still be denied by router above the affected change) https://github.com/fulcrologic/fulcro Actually, use 3.4.2-1. The first one had a CLJ issue for the CLJC file.#2020-10-0412:05blueberryNeanderthal 0.38.0 released, with CUDA 11 support! Vectors, matrices, and linear lagebra in Clojure with incredible speed on CPU, Nvidia GPU, and AMD GPUs! http://neanderthal.uncomplicate.org https://github.com/uncomplicate/neanderthalhttps://t.co/0CBopKQUon?amp=1 http://aiprobook.com#2020-10-0412:25carocadparcera v0.11.4 is out. This release includes support for octal literals and two bug fixes for symbols and eval. Hope you like it 🙂. Thanks to @sogaiu for his support testing all the different scenarios. https://github.com/carocad/parcera#2020-10-0415:23teodorluScicloj's interview with Anthony Khong about Geni is now available on YouTube. Geni, written by Anthony, is a REPL-friendly Clojure wrappper for Apache Spark. Tune in to learn about how Anthony Khong got into data science, what limits Spark Notebooks, and how the situation changes with Clojure. https://www.youtube.com/watch?v=3R2FJQdtLf8#2020-10-0418:15Jakub Holý (HolyJak)I cannot save it for later in YouTube because it is marked Made for Kids https://support.google.com/youtube/answer/9632097?nohelpkit=1&amp;hl=en-GB#2020-10-0419:36seancorfield@U3X7174KS This sort of thing belongs in #news-and-articles and not in #announcements which is intended for project/library release announcements (per the topic of the channel).#2020-10-0504:01jumar@U04V70XH6 Maybe mention this policy in the topic then? To me this channel is a perfect place for this type of announcement (I didn't know about the other channel until now) but I'm fine with the other place if it's easy to find.#2020-10-0504:03seancorfield@U06BE1L6T read this channel's description -- it really is pretty clear.#2020-10-0504:04jumarI know (after I read it) but it's not clear where the other things should go. Also the channel name is quite generic#2020-10-0504:08seancorfieldThe description can't be expanded -- Slack has a limit there. I've updated the topic to point to other channels.#2020-10-0504:09seancorfieldMost people read the topic, see it's only for projects and libraries, and ask in #slack-help or #community-development about where they should post non-project/lib announcments.#2020-10-0504:10seancorfieldBTW, channel topics are also limited in length and, unfortunately, any member can change the topic so we're always at the mercy of members changing the topic -- it's not something Admins can control...#2020-10-0504:11seancorfield@U06BE1L6T Everyone is auto-joined to #events and #news-and-articles so I'm surprised you didn't know about them.#2020-10-0504:13seancorfield(also to #slack-help #beginners #clojure #off-topic -- from that initial set of seven channels, folks ought to be able to figure out how to get around here)#2020-10-0504:17jumarThanks, that helps. I wasn't there for some reason - maybe the "auto join" for this channel was only configured after I joined clojurians? (I think more than 3 years ago)#2020-10-0504:35seancorfieldEntirely possible -- but if you've been around that long, I'm genuinely surprised you haven't run across those channels by now... 🙂#2020-10-0506:05teodorlu@U04V70XH6 Thanks, for letting me know, I'll use #news-and-articles in the future.#2020-10-0506:07teodorlucc @U066L8B18#2020-10-0506:12teodorlu@U0522TWDA Thanks for the feedback! I can reproduce the problem, and I'll look into it.#2020-10-0419:42ziltiI made scripts on the OpenSUSE Build Service to make clj-kondo available to install https://software.opensuse.org//download.html?project=home%3Azilti%3Aclojure&amp;package=clj-kondo, as well as an AppImage. The instructions have been merged into the clj-kondo repository. No more manual updates! https://github.com/borkdude/clj-kondo/blob/master/doc/install.md#2020-10-0420:02borkdudeThanks!#2020-10-0420:57CandidJoker v0.15.7 is released https://github.com/candid82/joker/releases/tag/v0.15.7#2020-10-0421:20danaborNew version of mate-clj is now available on clojars! 🚀 https://github.com/AppsFlyer/mate-clj#2020-10-0504:41delaguardoIs there a difference from tools.trace ? https://github.com/clojure/tools.trace#2020-10-0506:40danabori would say its a bit different, the aim of mate-clj is to print to repl the steps of execution of the macro/fn and to give the developer more understanding about each step and how it got to the final result.#2020-10-0508:25delaguardobut that is exactly what tools.trace is trying to do
user=> (use 'clojure.tools.trace)
nil
user=> (trace-vars + reduce)
nil
user=> (reduce + [1 3 5 7 9])
TRACE t442: (clojure.core/reduce #object[clojure.tools.trace$trace_var_STAR_$fn__319$tracing_wrapper__320 0x71e5f61d "c
#2020-10-0508:26delaguardobut instead of having separate implementation for core functions it is instrumenting resolvable vars leaving implementation intact#2020-10-0512:56danaborthe thing is that I wanted to use a different method not wrapping all the fn so for example if i want to debug a specific execution of reduce and not all the executions in a code block if i have it more then one, also we are working working now on having the ability to set a kind of a level to it so you can control when it will be printed to the repl and when not depends on your needs.#2020-10-0515:19kennytiltonThe publicly available https://kennytilton.github.io/whoishiring/ browser (a Matrix JS app) has now been ported to CLJS Matrix: https://github.com/kennytilton/matrix/tree/master/cljs/whoshiring. Yay. Compare also with a pure CLJS Reagent https://github.com/kennytilton/matrix/tree/master/cljs/whoshiring and re-frame https://github.com/kennytilton/rehiring.#2020-10-0515:23dharriganThat's pretty awesome. Of course, the first thing I typed in was "clojure" 🙂#2020-10-0515:43djanusI had no idea that Cells was coming to CLJS!#2020-10-0516:04kennytilton@U11EL3P9U Yep: mine is “clojure or cljs or scheme or lisp”. I’ll throw in dart and flutter just to track those.#2020-10-0516:16kennytilton@UFR3C1JBU I gotta talk to my PR crew! 🙂 I ported Cells to CLJ/CLJS thru the awesomeness of CLJC ’bout five years ago, and instead of Qooxdoo on the front-end just went with mxWeb, a thin Cells-powered HTML wrapper. That is used in this latest whosHiring implementation. Thx for your Cells enthusiasm!#2020-10-0516:18kennytiltonps. If anyone wants to play with Matrix, ping me on #matrix and I will do up whatever doc you need. There are a bunch of demo apps, but they might have some bit rot. I’ll get those out of mothballs if desired.#2020-10-0517:59kennytiltonIt is a reactive hack akin to MobX, if you know that one. R/atoms have nice reactive capabilities, but last I looked suffered from glitches. Here is an old write-up. Skim down to “data integrity” for the gist. https://smuglispweeny.blogspot.com/2008/02/cells-manifesto.html#2020-10-0521:57Matthew CurryDidn’t know Cells was also here in clojure-land either, that’s awesome!#2020-10-0522:35kennytiltonThx, @UE67UFRDF! Cells actually picked up a few tricks moving to a non-OO basis, including instance-specific Cells and Cell-specific observers. Same in JS, btw, and in JS with defineProperty we get the same transparency as with CLOS. In CLJ we need to access properties with md-get to engage the cells wiring. Not the end of the world.#2020-10-0606:32viestiHi! I did a quick translation of the Largest-Triangle-Three-Buckets (LTTB) for Clojure: https://github.com/viesti/clj-lttb#2020-10-0715:25oliyHi everyone, I recently needed a Server Sent Events (SSE) client that could send an Authorization header to the server. Incredibly js/EventSource doesn't support this, and general consensus seems to be you can use js/fetch and the response stream. That means you still have to parse the event stream yourself, so I wrote a library to do it: https://github.com/oliyh/oxbow It's an SSE client for Clojurescript that uses js/fetch so that the full functionality of HTTP is available to you. It also has re-frame bindings 🙂#2020-10-0905:35Chris McCormickDoes it support the auto-reconnecting facility of EventSource?#2020-10-0907:36oliyNot at the moment, although I would like it to. It shouldn't be too hard to implement#2020-10-0912:53oliyhi @UUSQUGUF3 it now supports reconnecting as of 0.1.2, see the readme for details#2020-10-0719:01hkuptyGoing back to my journey w/ protobuf on clojure, I release https://github.com/hkupty/defteron/releases/tag/v0.2.0. It's still pretty much alpha-quality and tested on-demand by my uses, so if you're feeling adventurous, I'd be happy to take PRs and improve it 🙂#2020-10-0723:17Alex Miller (Clojure team)Clojure tools 1.10.1.708 is now available https://clojure.org/releases/tools#v1.10.1.708 • Fixes to handling transitive deps when newer versions of a dep are found in the dep expansion • https://clojure.atlassian.net/browse/TDEPS-168 - Improvements to -X error message handling#2020-10-0801:36ziltiI built Linux packages and updated them 🙂 Find them https://software.opensuse.org//download.html?project=home%3Azilti%3Aclojure&amp;package=clojure for various distributions.#2020-10-0811:20littleli1.10.1.708 -> scoop ✔️#2020-10-0811:25ziltiI just got assigned maintainer role for the Chocolatey package, so that one will follow shortly (this weekend)#2020-10-0808:47katoxThe release 0.4.0 of PGMig is out https://github.com/leafclick/pgmig/releases/tag/v0.4.0 What's new: • Native image capability to connect via TLS. • More command line options checks. Breaking changes • Command line options have the highest priority (overriding environment variables) • Environment variables have been changed to match psql environment • Updated to GraalVM 20.2.0. • No verbose logging defaults. Gihub: Pre-built x86_64 linux docker image is available at dockerhub (https://hub.docker.com/r/leafclick/pgmig)#2020-10-0814:18rutledgepaulvI've released [org.clojars.rutledgepaulv/ring-firewall-middleware "0.1.3"]. This release adds middleware for limiting or throttling concurrency and middleware for limiting or throttling request rates. The limits and throttles can be imposed globally or per some function of the request (useful for implementing per user or per tenant limits). https://github.com/RutledgePaulV/ring-firewall-middleware#2020-10-0816:45rdgdNice Paul! Killin' it per usual :-)#2020-10-0817:24ikitommiAfter a year in incubation, we are proud to present Malli, a new data validation and specification library for Clojure/Script! Big thanks to Clojurists Together for helping to ship it out. Introduction post: https://metosin.fi/blog/malli/ In short, Malli covers: • schema definitions, as data • support for open and closed maps • data validation and error reporting • humanised and localised error messages • spell-checking of map and multi keys • bi-directional value transformation • value and schema generation • tools for programming with schemas • support for JSON Schema, Swagger and DOT • open apis for both end users and extenders Coordinates: • Github: https://github.com/metosin/malli • Clojars: https://clojars.org/metosin/malli • Slack: #malli On behalf of Metosin and all contributors, Tommi#2020-10-0820:27dangercoderawesome! already have a really good use case at work. Thanks!#2020-10-0822:03uwoGreat project. I'd suggest striking this from your blog post: > Spec builds around [...] strong ideologies [...] Malli [...] aims to be pragmatic. The world is not perfect, it's ridden with nulls and optional keys and we should embrace them. The link on "ideologies" to "Maybe Not", followed by the contrasting distinction of pragmatism appears to misconstrue the talk: optionality fused to the container spec is a trap, and it is more practical to compose optionality specs for specific contexts.#2020-10-0909:02borkdudeI think this is an interesting point by @U09QBCNBY, @U055NJ5CC#2020-10-0911:54ziltiThis is really great, congrats! I am using the library currently mainly for input validation for our project at work, and it performs flawlessly (being aware that I am severely under-utilizing it currently)#2020-10-0915:41oliy@U09QBCNBY i think that comparison to spec is more valid for spec 1, the changes hinted at for spec 2 would make it a weaker argument#2020-10-0918:58ikitommithanks for the feedback. I could have used better wording (maybe strong opinions about optionality?) and done better job explaining: Spec2 removes support for explicit optionality, making optionality an implicit subtraction of schema and select. For designing new things with Clojure, this might be a good thing, but when interacting with the outside world with optionality and closeness baked in, these opinions make things harder.#2020-10-0912:56sylvainI've made the first release of [ageneau/keepachangelog "0.1.0"]. This standalone tool automates some release tasks related to keeping a changelog in the https://keepachangelog.com/en/1.0.0/ format very much like https://github.com/dryewo/lein-changelog upon which it is based (all credit to Dmitrii Balakhonskii) but the difference is that it does not depend on lein. The code is at https://github.com/ageneau/keepachangelog#2020-10-1009:54borkdudeClj-kondo v2020.10.10 New: shadowed var linter and various improvements and fixes Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20201010 This release is funded by Clojurists Together. Discuss in #clj-kondo#2020-10-1113:29borkduderewrite-edn: small utility lib on top of rewrite-cljc to rewrite EDN strings while preserving whitespace, formatting and comments: https://github.com/borkdude/rewrite-edn#2020-10-1200:38djblueportal 0.6.0 https://github.com/djblue/portal/blob/master/CHANGELOG.md#060---2020-10-11 The main highlights are the new command palette and keyboard shortcuts!#2020-10-1200:41djbluehttps://djblue.github.io/portal/ is also up-to-date with these changes if you wanted to play with the demo#2020-10-1315:48tvaughanI use the emacs nord theme and clojure syntax highlighting doesn't look like portal's (which is much better IMHO). Any idea what it would take to port portal's nord color choices to emacs and clojure mode?#2020-10-1317:24djblue@U0P7ZBZCK I'm not sure how to setup an emacs theme but you can find the colors I used here https://github.com/djblue/portal/blob/master/src/portal/colors.cljc#L5#2020-10-1207:32hkuptyDefteron 0.4.0: https://github.com/hkupty/defteron/releases/tag/v0.4.0 Now handles properly serialization/deserialization of structs and messages. 🙂#2020-10-1218:12Ben Slessclj-decompiler.el - A small Emacs package to decompile JVM Clojure code at point like you would macro expand https://github.com/bsless/clj-decompiler.el#2020-10-1220:59bartuka😮 thanks!#2020-10-1307:05Reshef Mann@UK0810AQ2 What about vim users? 😉#2020-10-1307:26Ben Sless@U015R6SQ77Z never heard of them 🙃 You're welcome to use the excellent vim implementation available for Emacs. emacs#2020-10-1315:44zcljHi, I have released the first version of my test.check.insights library. It provides functionality to give insights into values generated by test.check generators by providing support for labeling of values, coverage check and value collections. It also provides statistical hypothesis checking of user provided required coverage of values produced by your generators. See the README for more details. I hope you will find it helpful when writing more complex generators! https://github.com/zclj/test.check.insights#2020-10-1511:34mihaelkonjevicI’ve just released a functional statecharts library for Clojure and ClojureScript. Documentation is missing at the moment, but there are over 100 tests you can consult to check the functionality. Semantics are based on the SCXML standard https://github.com/retro/state-machete#2020-10-1511:56Lucy WangWhat's your major use case for inventing this lib? I've also created a clj/cljs statecharts library for better state management in re-frame apps and some custom script https://github.com/lucywang000/clj-statecharts#2020-10-1512:02mihaelkonjevic@UP90Q48J3 I didn’t know about your lib, I’ll definitely check your implementation! As for the usecase, I’ve started working on it last year as part of the research for https://github.com/keechma/keechma-next (In the end I’ve went with a different approach for keechma/next), but I’ve never finished it. I’m starting some work on a backend system that needs to have a pretty flexible business logic, so I’m planning to use statecharts + https://github.com/agentbellnorm/dativity (or an approach similar to it) to implement it.#2020-10-1512:05mihaelkonjevicI wanted to implement statecharts as a pure function without internal state to ensure I can use it in any context I need (and provide my own persistence on top of it). This was inspired by the https://github.com/cark/cark.behavior-tree library#2020-10-1512:05Lucy WangCool. You could also take a look the most popular js statecharts lib xstate (if not yet) https://github.com/davidkpiano/xstate , my lib borrowed most of the design from it.#2020-10-1512:07mihaelkonjevicYeah, I’ve used XState previously and it’s a great library, but in the end I went with an implementation that’s closer to the SCXML standard because SCION project has a great test suite (https://gitlab.com/scion-scxml/test-framework) which I was able to port, and it ensured that the algorithm is correct for more complex transitions#2020-10-1512:28Lucy WangGreat to know these projects like dativity, lots of food for thought! > implementation that’s closer to the SCXML standard because SCION project has a great test suite XState doesn't use scxml-like syntax but this doesn't prevent it to https://github.com/davidkpiano/xstate/blob/3dcf91861964f0e3c581b08fcb3357f658b75bea/packages/core/test/scxml.test.ts. My lib doesn't put conforming to SCXML as a top priority, but focus mostly on what I need in real world projects. For example I need delayed transitions, eventless transitions (transient states), first-class re-frame integration, so I implemented these features. OTOH so far I don't see any need for history states, so I just leave it out.#2020-10-1512:34Lucy WangJust created the #statecharts channel so people interested could talk there#2020-10-1512:38p-himikThe re-frame integration looks really interesting, especially the epoch support. Thanks!#2020-10-1514:09schmeereally interesting links in here, thanks for the inspo! :thumbsup:#2020-10-1521:32Alex Miller (Clojure team)Clojure tools 1.10.1.716 is now available: • Make edn reading tolerant of unknown tagged literals • Update to latest dependencies for maven-resolver and aws-api#2020-10-1618:21dharriganHi! My first time! I'm very pleased to announce that an updated sentry-clj is available for those who use Sentry for application monitoring. It brings the library up to date with the latest Java version (3.1.0). I hope people may find it useful. Clojars here: https://clojars.org/io.sentry/sentry-clj and the github repo here: https://github.com/getsentry/sentry-clj. Enjoy!#2020-10-1619:55borkdudeHey, we've been using that for a long time in our app at work. Do you work for Sentry?#2020-10-1619:55dharriganNope. No affiliation with them, apart from a user of their software#2020-10-1619:55borkdudeCongrats with the release either way#2020-10-1619:56dharriganThank you 🙂#2020-10-1709:33pezI am thrilled to announce that we have a new version of Calva out, v2.0.127, in which @stefan.van.den.oord has added support for Microsoft LiveShare. Meaning you can now work together (pair or mob programming, or whatever you fancy) on the same Clojure code files a bit Google Docs style. The host can share their REPL port and the guests and host can evaluate things towards the same app in this party mode. (It can get a bit weird though, as it is sometimes a bit of a mindfuck to figure out which app is actually evaluating things in this shared scenario. Think about a ClojureScript web app where the host has shared both the REPL and the web server ports. 😀) Read more about the LiveShare support in the Calva documentation https://calva.io/live-share/ Of course you are always welcome to the #calva channel to get further help in getting started.#2020-10-1821:31uochanJust released vim-iced ver 2.4.0, Clojure Interactive Development Environment for Vim8/Neovim. https://github.com/liquidz/vim-iced Now you can start and connect shadow-cljs REPL more easily. https://liquidz.github.io/vim-iced/#clojurescript_shadow_cljs#2020-10-1906:01ikitommi[metosin/malli "0.2.0"] & [metosin/reitit "0.5.9"] are out! Malli is a new data-driven data validation and specification library for Clojure/Script. This version adds the following: • improved handling of schema references: conditional walking, generators, JSON and Swagger Schemas • BREAKING (MINOR): map-utilities in malli.util automatically deref the top-level schemas • optional schema transformation schemas: :merge, :union and :select-keys • new options for explicitly configuring or disabling sci • support microsecond precision when parsing datetime strings • OpenAPI 3.0.3 https://spec.openapis.org/oas/v3.0.3#models-with-polymorphism-support in http://malli.io (click Pet) Reitit is a fast data-driven routing library for Clojure/Script. Few small fixes and support for the non-alpha malli. • Discussion in #malli & #reitit https://github.com/metosin/malli https://github.com/metosin/reitit#2020-10-1908:49borkdudebabashka/process: https://github.com/babashka/process A wrapper for java.lang.ProcessBuilder. This library can be used from the JVM and later this week there will probably be a new babashka release including the lib.#2020-10-1910:04borkdude#2020-10-1920:10Jakub Holý (HolyJak)Cool! I struggle somewhat with when I would want to use pipeline but I guess I will get it when I actually use the library. BTS isn't there a typo in: "The pipeline function returns a sequential of processes " -> sequence?#2020-10-1920:21borkdudea sequential is something which returns true for sequential?#2020-10-1920:21borkdudeUsually you will just use -> to pipe processes but in some cases this doesn't work well due to buffering, this is when you will use pipeline, it's probably a niche use case#2020-10-1918:29seancorfieldseancorfield/next.jdbc {:mvn/version "1.1.610"} -- https://github.com/seancorfield/next-jdbc/releases/tag/v1.1.610 -- supports duckdb; allows for more control over result set processing; improves compatibility with HoneySQL -- follow-up in #sql#2020-10-2017:10kennytiltonThe pure Matrix/JS Hacker News “Who’s Hiring” project https://kennytilton.github.io/whoishiring/ has now been ported to Matrix/CLJS https://kennytilton.github.io/whoshiring/index.html and will by month’s end replace the former in the AskHN monthly question links. Yay CLJS. While I was at it I added preserving search settings between sessions. More info soon over in #matrix.#2020-10-2114:00AndrosGlosa upgrades to 1.3.0 with private endpoints and paves the way for an administrative panel https://github.com/glosa/glosa-server#2020-10-2116:12greglookHappy to announce lein-monolith 1.6.1 with a handful of new features and some long-standing bug fixes! Significant changes include: • The each task supports a new :silent option, which will suppress task output for successful projects. This can be useful in large CI builds where the output is only consulted in the event of failure. • The each task is now compatible with composite profiles. • When each is used with :parallel, task aliases are now correctly resolved before iteration starts. • The monolith settings can now use :inherit-raw and :inherit-leaky-raw for attributes which should be inherited without interpretation (like paths). • The unlink task will now only remove internal checkouts by default. https://github.com/amperity/lein-monolith#2020-10-2119:43borkdudebabashka v0.2.3 released! Release notes: https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v023-2020-10-21 Featuring babashka/process: a new Clojure library around dealing with java.lang.Process and many other additions and fixes. Come chat in #babashka to learn more.#2020-10-2214:12Alex Miller (Clojure team)Clojure tools (clj) https://clojure.org/releases/tools#v1.10.1.727 is now available: • Fix clj -X:deps tree adding tools.deps.alpha to tree • Fix clj -X:deps mvn-pom adding tools.deps.alpha to pom deps • Fix clj -X:deps git-resolve-tags not working • https://clojure.atlassian.net/browse/TDEPS-152 - Fix clj -X:deps mvn-install on jar to also install embedded pom • Fix clj -Spom not respecting dep modifications from -A (regression)#2020-10-2215:30heliosHappy to announce the release of Lazo: https://github.com/nextjournal/lazo This is how we at Nextjournal keep our open source repositories in sync with our main repo. Interested in the feedback you might have.#2020-10-2216:54dominicmWhy this rather than a subtree? (Not a submodule)#2020-10-2218:35heliosThe main idea is to streamline the flow for the monorepo and ourselves. So, from a practical point of view our main repo is completely oblivious to the fact that there are other repositories out there, so nothing has to change internally#2020-10-2218:43Lennart BuitThe real question here is whether lazo is being opensourced from that monorepo with lazo :p#2020-10-2218:45dominicmOther than doing the push, isn't that what a subtree does?#2020-10-2308:34acronSubtrees are harder to retrofit#2020-10-2313:53athomasoriginalI was looking for a project like this for one of my monorepos. Thanks!!#2020-10-2217:05slipsethttps://github.com/slipset/deps-deploy is now available in version 0.1.3, Thanks to @cch1 who nudged me to finally fix signing artifacts.#2020-10-2222:11bringehttps://github.com/BetterThanTomorrow/calva version 2.0.129 is out with improved stack traces in the (relatively) new output/repl window! Visual demo in the docs: https://calva.io/output/#stack-traces. Join us in #calva for feedback, help, or to chat! • Stack traces now more closely resemble the output of `clojure.repl/pst` . • You can ctrl+click (cmd+click on Mac) the file names in the stack trace to navigate to the respective line (for Clojure files). • You can hover over symbol names in the stack trace to see the symbol documentation, as in normal code files. • You can ctrl-click (cmd+click on Mac) the symbols to Peek Definition, as in normal code files.#2020-10-2222:54just.sultanovHi, everyone! A Clojure(Script) library for unified responses v1.0.0 has been released with a stabilized API and some extra helper functions and macros. Happy hacking! https://github.com/anywhere-ninja/unifier#2020-10-2321:26javahippieclj-test-containers version 0.3.0 is out! If you are on a Mac, you should update, as it resolves an issue with the latest Docker version on Mac! * Clojars: https://clojars.org/clj-test-containers * Changelog: https://cljdoc.org/d/clj-test-containers/clj-test-containers/0.3.0/doc/changelog * GitHub: https://github.com/javahippie/clj-test-containers#2020-10-2516:42simongrayhttps://github.com/simongray/clj-graph-resources This is a curated list of mostly mature and/or actively developed Clojure resources relevant for dealing with graph-like data. It’s currently being expanded as I explore this area more thoroughly. Suggestions are welcome in the form of pull requests or Github issues. I try to steer around abandonware, though.#2020-10-2617:30plexusClojure + Minecraft = Witchcraft 😄 this is extremely rough and alpha but we're allowed to have some fun right. This uses an open source minecraft server (Glowstone) which makes it a much more straightforward approach than other Clojure/Minecraft attempts I've seen. https://twitter.com/plexus/status/1320778992232943617#2020-10-2617:31plexusI should note that you do need a minecraft account/license. Not sure how much they are these days.#2020-10-2619:04dominicmThat's the sponge derivative right? Interesting.#2020-10-2619:04dominicmI've been meaning to check out how well fabric and clojure go together.#2020-10-2620:16plexusI am still utterly confused about all the different minecraft projects and how they connect... The main thing I know is that this is a standalone server written from scratch, whereas most projects start from the official server then do all kinds of classpath shenanigans to mod it. It does use a bukkit/paper fork as a foundation, as far as I understand this makes sure it can work with existing plugins.#2020-10-2620:18plexusIt's a small project, not a ton of manpower so they're running behind a bit in terms of server version compatibility, which means you don't get the latest new block types and such, but works great if you stick to the right version.#2020-10-2621:23dominicmGlowstone is independent of sponge#2020-10-2710:00Jarda PernicaHi there! I have started small project to mimic re-frame architecture in js with Preact called pre-frame. It has similar API, yet covers the main functionality (signal graph, interceptors, coeffects), and is ultra small (1.5kB min gzip). https://github.com/PanJarda/pre-frame.#2020-10-2713:55Alex Miller (Clojure team)tools.deps.graph 1.0.56 is now available, just updates to latest tools.deps.alpha and makes available -X style execution with updated docs at https://github.com/clojure/tools.deps.graph/blob/master/README.md#2020-10-2714:15wilkerluciousing latest clj (from homebrew) I get Unqualified function can't be resolved: graph, seems like :default-ns clojure.tools.deps.graph is not available in this version#2020-10-2714:16wilkerlucioother minor thing, also got warning to replace :deps with :replace-deps#2020-10-2714:18Alex Miller (Clojure team)shoot, it's :ns-default#2020-10-2714:20wilkerluciohttps://github.com/clojure/tools.deps.graph/pull/7/files#2020-10-2714:20Alex Miller (Clojure team)fixed#2020-10-2714:20Alex Miller (Clojure team)sorry, we don't do PRs in contrib libs#2020-10-2714:21wilkerlucioah, no worries, closed, thanks for the fix 👍#2020-10-2910:42practicalli-johnExcellent tool. I've added it to https://github.com/practicalli/clojure-deps-edn#project-dependencies#2020-10-2722:57mauricio.szaboJust published Chlorine for Atom version 0.10.0. In this new release, I added the ability to query some Clojure metadata/vars using EQL. This does not mean that much for now, but it opens some possibilities with static analysis. So, in this version, doc-for-var and goto-var-definition are now using clj-kondo (if it's present on the PATH) if the editor is not connected to any REPL - so you have some functionality without the need of a connection. Discussions on #chlorine channel 🙂#2020-10-2816:50borkdudeGrasp: search code using clojure specs! https://github.com/borkdude/grasp#2020-10-2816:52telekidWHOA. This is such a cool idea.#2020-10-2817:32uwowhoa#2020-10-2818:26metasoarous@U04V15CAJ over here dropping fresh repos like woah!#2020-10-2819:43Ivansuper nice; this can be extended to do cool things 🙂 thanks!#2020-10-2918:54rgmthis is amazing; brb figuring out how to wrap this in a vim plugin.#2020-10-2920:18uwo@U08BW7V1V link it if you do, vimmer!#2020-10-3121:27borkdudeThere's also a binary available now: https://github.com/borkdude/grasp#binary#2020-10-3005:21Alex Miller (Clojure team)FYI, https://ask.clojure.org is in maintenance mode right now as I sort through some updates, should be back on tomorrow. sorry for the inconvenience#2020-10-3015:00Alex Miller (Clojure team)all fixed up, ask away!#2020-10-3013:51rutledgepaulvHi all, Piped is a new library for processing messages from Amazon's Simple Queue Service (SQS). It makes use of aws-api and core.async to implement a message processing machine with easy-to-implement hooks for user space code. Feedback and issue reports are certainly welcome as it's quite young. Find it at https://github.com/RutledgePaulV/piped. Main Features: - lightweight (no amazonica!) - graceful shutdown sequence - automatic lease extensions - batches calls to aws for receiving and acking - decent performance (still need to benchmark others though) - supports blocking and non-blocking consumers#2020-10-3017:41dominicmLooks like the core.async aspect is fully internal, I like it!#2020-10-3017:45rutledgepaulvyep, no need to use core.async as a user! but optionally you can return a channel from a handler with a result of :ack or :nack.. I should document that part 🙂#2020-11-0216:22Alex Miller (Clojure team)Clojure 1.10.2-alpha3 is now available • https://clojure.atlassian.net/browse/CLJ-2492 Remove uses of deprecated Class.newInstance() • https://clojure.atlassian.net/browse/CLJ-2534 Fix javadoc urls for JDK 11+ • https://clojure.atlassian.net/browse/CLJ-1364 vector-of does not implement equals or hashing methods • https://clojure.atlassian.net/browse/CLJ-2549 vector-of does not implement IObj for metadata • https://clojure.atlassian.net/browse/CLJ-1187 quoted metadata on empty literal colls is lost#2020-11-0316:24blueberryNew release 0.11.0! Linear Algebra for Programmers: An Interactive Tutorial with GPU, CUDA, OpenCL, Java, and Clojure theory • fast code • interactive: each line answers immediately • Read now at: https://aiprobook.com/numerical-linear-algebra-for-programmers#2020-11-0321:49danielcomptonClojurists Together wants to fund you to work on your Clojure project. More details at https://www.clojuriststogether.org/news/q3-2020-survey-results/. We're funding 4 project $9k each over 3 months. You could be one of the lucky projects!#2020-11-0412:40LuFinally had some time to add more functionality to arco v0.3.3 , a time-ago time-to lib with lots of customizability options plus reagent friendly 🙂. https://github.com/luciodale/arco#2020-11-0419:43Adam HelinsFinally! Now you can handle any binary format / protocol your heart desires in a cross-platform fashion: https://github.com/helins-io/binf.cljc Needing to handle MIDI stuff, I realized the current Clojure tooling was insufficient for such a common thing. It was a call for building a quite extensive library for all sorts of binary purposes and I hope you'll enjoy it. Currently in beta while awaiting feedback but the API is stable and already used in production.#2020-11-0420:43schmeecool! just a heads up: link to the full api in the readme is broken (https://cljdoc.org/d/helins-io/binf.cljc)#2020-11-1300:40didibusLooks neat#2020-11-0518:49Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.10.2-alpha4 is now available • https://clojure.atlassian.net/browse/CLJ-2587 Fix reflection warning in gvec from CLJ-1364#2020-11-0622:11mauricio.szaboJust published Clover version 0.2.1 in VSCode marketplace and on Open VSX. Clover is a socket-REPL package for VSCode, VSCodium, Gitpod and Eclipse Theia (tested on all these platforms) that's a port of Chlorine (for Atom). On this version, custom commands are enabled! So you can use the same API that you use on Atom (in ClojureScript) to define new commands on VSCodium (they will all be available as Tasks under the folder Clover). More info on the README: https://github.com/mauricioszabo/clover#custom-commands Discussions, for now, on #chlorine channel#2020-11-1300:37didibusWow neat. Even Eclipse Thea, interesting haha#2020-11-1315:40mauricio.szaboTo be honest, I just found that Theia does not have some APIS that I use on Clover, so custom commands will not work at all. But yet, the "regular stuff" should work fine#2020-11-0706:37metasoarousFor those of your impatiently twiddling your thumbs over the 2020 US Presidential Election results, I put together a little visualization project with ClojureScript and Oz (Vega-Lite). Please check it out, and feel free to contribute if you're inspired. Thanks! https://2020-election-results.surge.sh/#2020-11-0712:26borkdudeClj-kondo v2020.11.07 New: - deps.edn linting - import configs from deps - skip over already linted .jar files and more! Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20201107 This release is funded by @cljtogether! Come chat in #clj-kondo if you have questions.#2020-11-0800:09Sam RitchieHey all, a full release of #sicmutils is on its way, but I wanted to share a fully fleshed out Clojure(script) implementation of Power Series that I've just pushed, built with all the beauty of Clojure's lazy sequences: https://github.com/littleredcomputer/sicmutils/blob/master/src/sicmutils/series/impl.cljc I wrote it in literate programming style, so I'm sharing it in case anyone here's power-curious and wants to see how to do all sorts of arithmetic operations on infinite series (so wild). This is a port (and slight extension of) Doug McIlroy's functional pearl, "Power Series, Power Serious" http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.333.3156&amp;rep=rep1&amp;type=pdf For context, this fits into the SICMUtils project as one of the backbone-required-types for a computer algebra system that can run in the browser. The API that wraps it, and makes the series implement IFn etc, lives here: https://github.com/littleredcomputer/sicmutils/blob/master/src/sicmutils/series.cljc Feedback welcome, and I'd love to hear if this is interesting! (Again, larger release on the way, but this is a fun read on its own.)#2020-11-0816:32Gleb PosobinThis is very cool! I went through the first chapter of sicm last year, but in scheme. Great to see this library ported to clojure, I'll use it if I try going through the rest of the book. Anything you need help with?#2020-11-0919:41Sam RitchieHi @UQ4RJ22EA! that's awesome, would love your feedback. That's a good Q - it depends on what you're interested in. The bigger aim I've got is integration into Maria.cloud, a vision I describe here: https://roadtoreality.substack.com/p/the-dynamic-notebook#2020-11-0919:42Sam Ritchieso one answer is, there are lots of pieces of the library that I've found really rewarding to work on. if you have a hunger to learn about functional numerics in Clojure, I can help you navigate , and there is a LOT to port from scmutils (not used by the book but very cool) that would be awesome. reverse mode automatic differentiation would be another I'd love help on#2020-11-0919:43Sam Ritchieanother answer is, I had completed many of the exercises for the project in scheme, and plan on porting them to Clojure, and then putting them into Maria: https://github.com/sritchie/sicm#2020-11-0919:43Sam Ritchieso that would be great. But this is only a good answer if you're interested in the guts of the library, or going farther with the book!#2020-11-0919:44Sam Ritchielmk if you do any more of the book, and would love feedback on the Clojure port if you do try it. Thanks again!#2020-11-0816:10practicalli-johnhttps://github.com/practicalli/clojure-deps-edn monthly library update • added `:community/zulip-event to create events on the Clojurians Zulip community, which are automatically added to a global ical of events.#2020-11-0912:36henryw374Hi all, I made a drop-in-replacement for clojure.core/atom which records 'count of updates' and 'count of attempts to update' - ie it can be used to get an idea how much your threads are clashing: https://gist.github.com/henryw374/3627fb85be5cd909801b405b995428df . Ofc it adds some overhead of its own vs clojure.core/atom depend on it from deps:
com.widdindustries/stats-atom {:git/url ""
                               :sha     "f35fb32cfa6d4d0781c1c03983f9589cb04cbe4f"}
any feedback welcome
#2020-11-0915:18katoxPGMIG 0.5.0 is out New: • Support native-image programmatic migrations via https://github.com/borkdude/sci • Add cli option for the migration format: sql (default), clj, edn • Support EDN migrations (uberjar only) • Print version command Release notes: https://github.com/leafclick/pgmig/blob/master/CHANGELOG.md This release you can even grab pre-built binaries for Linux/Mac/Windows here: https://github.com/leafclick/pgmig/releases/tag/v0.5.0 Shout out to @borkdude for SCI!#2020-11-0916:44littleliZdravím Kamile 👋 I enlisted Windows binary of pgmig in scoop-clojure bucket there among other great tools built using Clojure and Graalvm's native-image. https://github.com/littleli/scoop-clojure PR https://github.com/littleli/scoop-clojure/pull/127 Every scoop installer user on Windows can now easily install pgmig with convenience of single command:
scoop install pgmig
I hope someone finds it useful. Cheers :flag-cz: simple_smile
#2020-11-0918:01greglookAfter a bit of a hiatus, a new version of cljstyle is available! Version 0.14.0 fixes a few bugs, revamps the configuration file format, and offers a 2.3x speedup over the previous version. gotta_go_fast Pre-built binaries are available on GitHub, or can be installed via Homebrew. https://github.com/greglook/cljstyle/releases/tag/0.14.0#2020-11-0918:23Jacob O'BryantI have recently finished some major updates to https://findka.com/biff, a full-stack web framework: • Tight (but optional) integration with Terraform. Deployment is now just "set some config variables, run a few commands". I'm trying to achieve a firebase/heroku-like experience but without being tied to a particular platform. • Project templates for single-page and multi-page apps: run bash <(curl -s ) to get started. • Simplified code structure. It's easier to understand now. • Various cleanup/small improvements, e.g. moved from immutant to jetty. • And I've kept all the documentation up-to-date. (Check out the new https://findka.com/biff/#overview section). To help Biff grow, I've been considering giving free one-on-one mentoring to people who want to learn web dev in Clojure (with Biff), as my schedule allows. Fill out this quick survey if you're interested: https://airtable.com/shrKqm1iT3UWySuxe. There's also a #biff channel by the way.#2020-11-1114:34Louis KottmannThe documentation looks really good#2020-11-1008:02Ertugrul CetinHi all, I created a leiningen plugin that checks that order of namespace declarations for Clojure and ClojureScript • Checks that namespaces/packages inside :require and :import are sorted. • There are pre-defined sorting functions (asc, desc, etc.). Also, you could define your custom sorting function. • Automatically replacing namespace declarations in source files, so no need for a manual update. https://github.com/ertugrulcetin/lein-nsort#2020-11-1119:21Noah Bogartthis is cool! should I post feedback here or in a github issue?#2020-11-1714:46Ertugrul Cetin@UEENNMX0T sorry for the late reply, GitHub issues would be great!#2020-11-1714:47Noah Bogartcool, will do#2020-11-1113:49vlaaadreveal New version of #reveal — https://vlaaad.github.io/reveal — is out! Since previous announcement Reveal gained some valuable UX improvements, such as: • natural structural navigation that makes value inspection similar to browsing tables — see added https://vlaaad.github.io/reveal/#structural-navigation; • better keyboard support for table views — see updated https://vlaaad.github.io/reveal/#table-view.#2020-11-1116:10darwinHi, I have just updated cljs-react-three-fiber examples[1] It uses three.js and react-three-fiber to render simple 3d demos[2]. The interesting part is that it shows how to integrate with non-trivial npm packages (thanks to shadow-cljs), it uses latest react via helix, with cljs-bean and custom wrapper functions we can write pretty idiomatic cljs code and it gets optimized by closure compiler and split into modules automagically. e.g. the physics demo module includes cannon physics library or the gltf loading demo modules includes gltf libraries (run ./scripts/report.sh to see the results). [1] https://github.com/binaryage/cljs-react-three-fiber [2] https://github.com/pmndrs/react-three-fiber#2020-11-1207:13NazralHi, I would like to share https://github.com/Tyruiop/needle a small tracing/profiling library that I made that uses the neat frontend provided by . It acts as a drop in replacement for both defn and fn and I mainly use it at work/on personal projects to keep track of the value of my functions' arguments/output and/or look for bottlenecks in my code. It has been quite helpful for me so far in helping me debug and improve performance of my code.#2020-11-1316:24tiensonqinLogseq's frontend code is open-source now: https://github.com/logseq/logseq#2020-11-1316:26dharriganJust hit the home page out of curosity, renders blank, throws an exception#2020-11-1316:26dharrigan
Object { message: "Attribute :block/page should be marked as :db/index true", data: {…}, ph: null, name: "Error", description
#2020-11-1316:28tiensonqinThanks, let me check!#2020-11-1316:30borkdudeSame here#2020-11-1316:31tiensonqin@U04V15CAJ oops ...#2020-11-1316:31borkdude
ao {message: "Attribute :block/page should be marked as :db/index true", data: $…P.k, ph: null, name: "Error", description: undefined, …}
columnNumber: undefined
data: $APP.k {meta: null, T: 3, J: Array(6), D: null, B: 16647951, …}
description: undefined
fileName: undefined
lineNumber: undefined
message: "Attribute :block/page should be marked as :db/index true"
name: "Error"
number: undefined
ph: null
stack: "Error: Attribute :block/page should be marked as :db/index true↵    at new ao (    at Function.Bp.l (    at Function.Bp.j (    at SC.h.mj (    at yD (    at oI (    at     at Function.NP.o (    at NP (    at vQ ()"
__proto__: Error
#2020-11-1316:32tiensonqin@U04V15CAJ oh @U11EL3P9U just told me that it works on chrome but failed on firefox.#2020-11-1316:32borkdudeI'm on chrome#2020-11-1316:32dharriganinteresting!#2020-11-1316:32borkdudeFor me it works on Firefox though :)#2020-11-1316:32tiensonqinIt might be a datascript version issue#2020-11-1316:33dharriganha! i'm the opposite - works on chrome, but not firefox#2020-11-1316:33tiensonqinquite interesting now!#2020-11-1316:34dharriganworks on safari#2020-11-1317:18borkdudeDelete localstorage and indexeddb#2020-11-1317:18borkdudeThat made it work for me#2020-11-1317:19tiensonqin:thumbsup:#2020-11-1518:12rymndhngHey all, a new version of https://github.com/dakrone/clj-http is available with maintenance fixes and bugs. See https://github.com/dakrone/clj-http/blob/3.x/changelog.org#3110 for more details!#2020-11-1613:54ingesolAnnouncing https://github.com/ingesolvoll/glimt, a simple FSM wrapper around re-frame’s `:http-xhrio` effect with retries and error handling. State of request is tracked through a simple subscription instead of callback/dispatch. Code example:
(def fsm {:id          :customer-loader
          :http-xhrio  {:uri             ""
                        :method          :get
                        :response-format (ajax/json-response-format {:keywords? true})}
          :max-retries 5
          :path        [::customers 123]})
#2020-11-1622:12genekimI’m excited to read about Skija, the new JVM bindings to Skia (at the heart of Chrome, Android, Flutter, etc.), written by @tonsky, funded by JetBrains. https://github.com/JetBrains/skija/ Tonsky writes about his desktop for the JVM vision here: https://tonsky.me/blog/skija/. (Which I’ll summarize by saying, “can we have Electron for the JVM, but better?“) JetBrains funded this, which I believe builds upon Skija: https://www.jetbrains.com/lp/compose/ (“Fast reactive desktop UIs for Kotlin, based on Google’s https://developer.android.com/jetpack/compose and brought to you by JetBrains”, forked from Android Compose.)#2020-11-1622:17genekimAnd one more JetBrains project: Skiko windowing manager — higher level than Sijja, but lower level than Compose for Desktop: https://github.com/JetBrains/skiko/ Scanning this to see how easy it would be to use with Clojure. :)#2020-11-1622:22borkdudeExciting! I will await skijacl by @U47G49KHQ ;)#2020-11-1622:38vlaaadif only they released it a couple of years earlier...#2020-11-1700:18JAtkinsI love this#2020-11-1700:19JAtkinsI have been in a bind between electron and jfx, this possibly solves that issue#2020-11-1702:21mruzekwAre there any talks of extending to mobile as well?#2020-11-1702:24phronmophobicit seems like at least android is mentioned. skia (the library skija wraps) can compile for just about any target (I'm pretty sure).
#2020-11-1710:49borkdude@U6VPZS1EK https://github.com/JetBrains/skija/blob/master/examples/clojure/src/lwjgl/main.clj#2020-11-1719:11genekim@U04V15CAJ I saw that! Very exciting to see!!#2020-11-2120:42bruno.bonacciAnother set of high-quality Clojure liraries for 2D & 3D graphics are available at: https://thi.ng/ by Karsten Schmidt There are over 100 libraries for pretty much everything: from computational geomentry, to 3D rendering, to color management, math, generative art, ray tracing and 3d printing..#2020-11-2203:15jimmySuper excited about the potential of this. :) Has anyone got this working with nrepl? I’ve tried a few things but actually get jvm crashes when attempting to make it work.#2020-11-2413:40synthomatI really appreciate that the compose-jb project has some screenshots of the examples so that I don’t have to run the code myself 🙂#2020-11-2222:48mihaelkonjevicI’ve just released Penkala - a composable query builder for PostgreSQL. I’m still working on the docs and the tests, but I’d like to get your feedback https://github.com/retro/penkala#2020-11-2418:08Alex Miller (Clojure team)A new version of the Clojure tools is now available - https://clojure.org/releases/tools#v1.10.1.739 • Fix use of jdk profile activation in local deps with pom files • Fix error handling for -X to avoid double throw • Add error handling for -A used without an alias • Use tools.deps.alpha 0.9.840#2020-11-2611:19oliy:camera_with_flash: kamera 0.1.4 is out 🎊 https://github.com/oliyh/kamera kamera provides visual testing tools for Clojure with https://github.com/bhauman/figwheel-main and https://github.com/bhauman/devcards integration. This release changes: • The method kamera uses to resize chrome to contents. Previously it used those exposed by chrome dev protocol but now evaluates javascript https://github.com/oliyh/kamera/pull/30 This release adds support for: • Specifying the dom element to resize the browser to https://github.com/oliyh/kamera/pull/30 (thanks https://github.com/jleonard-r7 and https://github.com/johanatan) • Asserting that there is at least one test https://github.com/oliyh/kamera/issues/25 • deps.edn https://github.com/oliyh/kamera/pull/28 (thanks https://github.com/johanatan) • The dssim algorithm https://github.com/oliyh/kamera/pull/33 (thanks https://github.com/johanatan and https://github.com/jleonard-r7) This release improves: • The `element-exists?` predicate is now more forgiving https://github.com/oliyh/kamera/issues/27 #2020-12-1808:19Teemu KaukorantaMay I ask how you came up with the name? 😄#2020-12-1817:19oliyMy wife is half Finnish, and kamera is much more googleable than camera :)#2020-11-2708:58borkdudeBabashka 0.2.4 released! Featuring an all new pREPL implementation which is used by NextJournal to build a babashka notebook environment: http://nextjournal.com/try/babashka?cm6=1 See changelogs for more details: https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v024#2020-11-2723:16uochanJust released antq ver 0.9.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Supports upgrading outdated dependencies (excepting YAML) finally!#2020-11-2820:28tony.kayI’m pleased to announce a few minor releases and patches for the Fulcro ecosystem: Fulcro 3.4.5 - Minor bug fixes, primarily around CLJC usage Semantic UI Wrappers 2.0.2 - Update for wrappers around the latest React Semantic UI. (WARNING: follows break versioning, the underlying js lib removed some features) The Fulcro RAD Demo and Fulcro template were also updated to use more recent versions. https://github.com/fulcrologic/fulcro https://github.com/fulcrologic/semantic-ui-wrapper https://github.com/fulcrologic/fulcro-rad-demo https://github.com/fulcrologic/fulcro-template#2020-11-2902:31st3fanI wrote another GitHub bot in Clojure … https://github.com/apps/devbots-vacation#2020-11-3014:34tengstrandThe Polylith team has just released a big update to the Polylith architecture. Now it's even simpler to grow software out of composable LEGO-like building blocks: http://polylith.gitbook.io#2020-11-3014:57athomasoriginalThis is really interesting! Thank you for sharing 🙂#2020-11-3015:49jmayaalvis there a changelog ? or a place to check what’s new ?#2020-12-0109:09jamesThere’s no official changelog, but it’s probably a good idea to add that.#2020-12-0109:10jamesHere’s how I summarised the changes on the HackerNews thread:#2020-12-0109:12tengstrandYou can find a more detailed list in the migration instruction: https://github.com/tengstrand/lein-polylith/blob/master/migrate/migrate.md#2020-12-0208:19jmayaalvVery nice, Thank you! :)#2020-12-0108:37Jakub Holý (HolyJak)Introducing v0 of https://github.com/holyjak/clj_tumblr_summarizer/, a CLI tool that can currently fetch and store into files new posts from a Tumblr blog. Eventually this will evolve into a scheduled Lambda that will back up the posts and produce a monthly summary of the new ones to publish on a blog. Also a hobby project to learn more about core.async and Datomic.#2020-12-0115:30plexusThe first release of lambdaisland/fetch is out, a lightweight wrapper around JavaScript's fetch API https://github.com/lambdaisland/fetch/#2020-12-0115:49chrisnFirst release of https://github.com/cnuernber/libjulia-clj 🙂. So you can Julia in your Clojure and (soon) Clojure in your Julia. I just barely have enough working to talk about but I do have it provably working across 2.5 operating systems, according to Travis 🙂. Julia sits kind of at the pinnacle of the numerics stack. It is a generalized very high performance language specifically designed to make mathematical and scientific computing clearer, more enjoyable, and more correct. In the techascent stack, it sits just after something like Smile's BLAS binding but just before TVM. Unlike a specific blas binding, you can write bespoke code in Julia and it is highly optimized for you. Unlike TVM, the language is Turing complete. Julia has the best solvers known to computer science and it has a fully differentiable computing stack. I think it points the way forward in terms of dense and sparse style numeric computing. It has great metaprogramming capabilities and a community of extremely capable people pushing it forward. Pairing Julia tightly with Clojure allows us to use their vast libraries of scientific computing and gives us an avenue to take advantage of truly cutting edge numeric research directly. I would like Julia people to enjoy using Clojure and vice versa. This is absolutely a hair-on-fire early release. I put this forward in order to just let everyone know it is concretely possible and to open the door for people who may be interested in helping out.#2020-12-0122:55Chris McCormickHey all! Today I'm releasing PO LoopSync, an niche Android app for playing audio loops sync'ed to Teenage Engineering's Pocket Operator devices. I built it with ClojureScript & browser tech (using Cordova, Reagent, webaudio, and shadow-cljs). I was particularly surprised/excited to be able to squeeze all this audio processing functionality & UI out of just 427 lines of ClojureScript code. 🤓 https://twitter.com/mccrmx/status/1333899214649053184#2020-12-0218:58Thomas TayCool! I've been looking into making apps too, would you say that there were any perf issues with Cordova that you had to lookout for, given you're doing audio work?#2020-12-0222:19aviSuper cool! I totally understand if not, but is there any chance it’s open source, or you might consider giving me a peek at it? I’m super curious about building iOS/Android apps with Clojure, and I’m not up to date with the state of the art there. No worries if not. Thanks!#2020-12-0223:10Chris McCormick@U01E5ARK4AF there are performance issues in general doing audio in the browser, yes. I was able to get away with webaudio because the playback is very static (loops) so once the playback is queued up it basically just continues without a problem. When the user makes a change like muting a loop or volume change, I have to update the mix and I do this on an async thread so it doesn't interrupt the main playback. I am looking at ways to improve this using webaudio. An issue with Cordova is it uses whatever webview is in the OS, so if they have an old phone the webaudio implementation might require workarounds. One small upside of this is the binaries are tiny - my app is a couple of megabytes for example. People seem to value this.#2020-12-0223:12Chris McCormick@U69US348Z I will open source it at some stage but I am not ready yet. You've given me a good idea though. I will put together a boilerplate/tutorial for building native apps with ClojureScript using Electron and Cordova and post it here. Thanks for your interest!#2020-12-0223:47avi@UUSQUGUF3 that’d be fantastic — I’m looking forward to it! Please let me know if you could use a beta reader for feedback, I’d be happy to help.#2020-12-0300:15Thomas TayWould equally appreciate that, if you do post it tag me!#2020-12-0300:16Thomas TayIronic that web view binaries are small on mobile, while Electron is always (unfairly) criticized for being bloated#2020-12-0300:57Chris McCormickThanks, will do!#2020-12-0217:51RollACasterThis is the thing I wish I had when I started to work with ClojureScript + D3 📊. There is still a lot of work to be done, but maybe it is already useful for someone 🙂 https://github.com/rollacaster/hiccup-d3#2020-12-0518:10practicalli-johnPracticalli Clojure user level configuration with a wide range of communty tools for Clojure CLI (deps.edn) projects Monthly library version update via :project/outdated which uses antq. The library version changes are documented in the change.log. Notable change: Kaocha updated as issue with optional test.check library resolved https://github.com/practicalli/clojure-deps-edn/#2020-12-0611:54bozhidarI wrote an article on the merits of "Semantic Clojure Formatting" that I hope some of you would find useful https://metaredux.com/posts/2020/12/06/semantic-clojure-formatting.html Btw, the related guidelines in the Clojure style guide have been expanded with more rationale as well (read on from here https://guide.clojure.style/#body-indentation)#2020-12-0613:09borkdudeHi @U051BLM8F. Usually this stuff goes into #news-and-articles as this channel is for project/library announcements only.#2020-12-0615:31bozhidarFirst time I hear of this channel. My bad, deleted.#2020-12-0615:32borkdudeNaming is hard. It's an often made "mistake" that gets often corrected by the admins.#2020-12-0618:15seancorfieldI guess we hope more people would read at least the topic before posting:thinking_face:and maybe the description too...#2020-12-0619:26bozhidarFair enough. 🙂#2020-12-0804:55Alex Miller (Clojure team)A new version of the clojure tools is now available (https://clojure.org/releases/tools#v1.10.1.754) • New, more informative tree format for clj -Stree / clj -X:deps tree • Added https://clojure.github.io/tools.deps.alpha/clojure.tools.cli.api-api.html#clojure.tools.cli.api/tree for use with clj -X:deps tree • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.9.857#2020-12-0815:00genmebloghttps://github.com/genmeblog/soundsynth Wavetable sound synthesizer. It's a study project which helps me to understand DSP needed to implement similar thing on STM32 chips. It contains minimal path for subtractive synthesis. It works, plays a nice piece, allows live patch changes, consists of: wavetable oscillator, state variable filter, adsr envelopes, wave shaper, phase modulation, sequnecers with bpm timer. Listen to the song generated by it and defined in sound.patch namespace: https://soundcloud.com/tsulej/lost-woods#2020-12-0815:51vemvAce! I'm giving it a spin. So you foresee giving it support for accepting midi inputs? (I have no idea of how hard that would be).#2020-12-0815:58genmeblogYes, we are (I'm helping my 16yo son with this project) after tests on STM32 and MIDI is quite simple there. You just receive note on/off events with note value and velocity. I don't know yet if add MIDI in Clojure but looks like it's a straightforward java interop.#2020-12-0816:06lukaszOvertone has MIDI support - maybe you can take some inspiration from it: https://github.com/overtone/overtone/blob/master/src/overtone/midi/file.clj#2020-12-0816:07lukaszThis is probably more useful: https://github.com/overtone/overtone/blob/master/src/overtone/midi.clj#2020-12-0816:14genmeblogOh lovely! Thanks.#2020-12-0816:17genmeblogIt's not as easy as I thought.#2020-12-0817:44Ben SlessDSP, that takes me back...#2020-12-0822:55ghadiHopefully you’ve seen Rich’s conj talk about additive synthesis https://youtu.be/bhkdyCPYgLs#2020-12-0909:42plexusThe javax.midi stuff isn't hard to use, just a little tedious because of the amount of classes and interop involved. Here's an example of getting key presses from a midi controller https://gist.github.com/plexus/27dfe6a69cda7ec90dab479d37b7b1cc#file-obs_controller-clj this uses a defwrapper macro to sweeten doing interop, I posted that also on ClojureVerse a while ago and someone ran with it and turned it into a library: https://github.com/emlyn/tortilla#2020-12-0909:43plexusSorry I don't have a cleaner example handy right now, but find some java examples, they should be straightforward to port.#2020-12-0910:51ordnungswidrigAre you using a midi keyboard to control OBS? 😈#2020-12-0911:44genmeblog@U07FP7QJ0 Thank you, I think this is enough material to digest. As I said previously I'm not sure if I want to add midi controller support, since I achieved what I wanted, ie. dsp path works and can be used to implement target synthsesizer on STM 🙂 (btw. I remember and forget about defwrapper - great idea and I happy to see this as a library)#2020-12-0912:49plexus@U054UD60U doesn't everyone? 😁 I use the pads on the keyboard to switch betweens scenes like camera, share screen, etc#2020-12-0913:03ordnungswidrigHehe, as one of the nerds that build their own keyboards I would rather create custom keyboard or use a “macro pad” to trigger some key combinations… Or use a wifi enabled chip to directly manipulate OBS, now that I think about it 🙂#2020-12-0916:26eggsyntax@U1EP3BZ3Q looking forward to checking this out! Wavetable synthesis has made so many interesting advances in the past few years...#2020-12-0917:02genmeblog@U077BEWNQ I relied on Mutable Instruments source code. Their products sound pretty awesome.#2020-12-0917:22eggsyntaxHave you seen that there are free ports of the Mutable Instruments devices to the (also free, and awesome) VCV Rack virtual modular environment? Although I haven't used the physical modules, reviews suggest that the ports are a pretty close match. Tons of fun to play with 😀 https://vcvrack.com/AudibleInstruments#2020-12-0917:28genmeblogYes!!! I know VCVRack and played with Audible Instruments. Actually, this a wrapper to the MI source, which helped me to find entry point to the Plaits instrument and their wavetable oscillator I've stolen the idea from. I want to say that code is highly readable and it was really fun to port some parts to the Clojure.#2020-12-0922:56genmeblog@U050ECB92 I haven't seen this before! Lovely stuff. Mostly based on overtone/supercollider rendering though. Here I render sound purely in clj.#2020-12-0910:30clyfe[ANN] Tape Framework pre.alpha: kind of like Duct but for Frontend Announcement https://github.com/tape-framework/doc/blob/master/ANNs/0-pre.alpha.md, tutorial https://github.com/tape-framework/doc/blob/master/docs/Tutorial.md, example app https://github.com/tape-framework/7guis, project https://github.com/tape-framework/. Gist is: Reagent + Re-Frame + Integrant system out of a Module system (ported from Duct) + an experimental interface to Re-Frame + some extra tooling + a body of recipes.#2020-12-0914:16mpenetfyi there's a (clj) "tape" library out there already https://github.com/mpenet/tape If you want to do some SEO you might want find another name; or not, personally I don't mind.#2020-12-0915:52bedersI kinda like the meta-data approach.. However, if you go down that route, I would also expect to see it being used in subscriptions. From one of the samples:
[celsius         @(rf/subscribe [::temperature-converter.c/celsius])
Would have expected to see this: (tape/subscribe temperature.converter.c/celsius)
#2020-12-0915:54bedersthat way I don't have to make a translation from keyword to fn (which my IDE also doesn't understand)#2020-12-0916:12clyfe
(defn tape-subscribe [f & args]
  (let [{:keys [ns name] ::v/keys [sub]} (meta (var f))
        kw (if (qualified-keyword? sub) sub (keyword (str ns) (str name)))]
    (rf/subscribe (into [kw] args))))
;; (tape-subscribe temperature.converter.c/celsius)
Should work in the meantime I believe.
#2020-12-1223:53clyfe@U628K7XGQ Your idea turned out great! https://github.com/tape-framework/mvc/commit/f85fe6b56a3287b5b0f699c87da593dad1d2f8dd#2020-12-1406:31bederscool! Thanks for putting it in!#2020-12-0914:57AleedReleasing Interdep, a library that helps you intercept a monorepo’s deps.edn configs, so as to provide a sane, documented way of managing multiple subrepo deps and aliases. Many libraries out in wild use Leiningen for monorepo support. Intention of this library is to serve as stop-gap solution using only tools.deps. https://github.com/rejoice-cljc/interdep#2020-12-0915:15Alex Miller (Clojure team)I wish that had a rationale. I have no idea what problem it's trying to solve.#2020-12-0915:16Alex Miller (Clojure team)(as someone that might be in a position to solve such a problem)#2020-12-0915:17borkdudeThis library came up in #tools-deps before. It tries to solve the multi-repo problem that people have tried to fix with CLJ_CONFIG#2020-12-0915:19borkdudeBut then by generating a deps.edn on the fly#2020-12-0915:19Alex Miller (Clojure team)I'm confused by the discussion of aliases in the readme#2020-12-0915:19Alex Miller (Clojure team)is this the same problem as https://ask.clojure.org/index.php/9849/teams-common-dependencies-tooling-across-multiple-projects#2020-12-0915:20borkdudeyes#2020-12-0915:21Alex Miller (Clojure team)well, I'm really asking @UPH6EL9DH#2020-12-0915:37Aleedso it solves two problems 1. using the nested aliases of subrepo deps, since with default functionality local dep aliases are not activated. 2. calling multiple aliases can be tedious (e.g. :app-main:api-main), so we also match aliases based on configured profiles (http://e.ga :main profile for matching the those aliases) #2020-12-0915:38Aleedi’ll try to make motivation/docs more clear when I get a chance#2020-12-0915:42Aleeda third problem, btw, is that using local:root deps is not always possible if deployment needs to be reproducible, so in that situation you also need a tool that unifies nested configurations#2020-12-0915:43Alex Miller (Clojure team)these seem like different problems than the ask question above. if there are good problems here, filing an ask question that asks it would be helpful to me. I'm not sure the problems you list are really the problems though, seems like could dig deeper. (like why do you need to invoke nested aliases of subrepo deps? what do those aliases do? etc)#2020-12-0915:48Aleedone basic scenario: I have an :app/test and :api/test alias, and I want to run them from root of project another more opinionated scenario: I avoided putting subrepo deps in top-level :path and :deps , since they’re automatically loaded. instead, each subrepo puts all its deps under aliases, so I’d call the :app/main and :api/main aliases to load their deps before starting a program. reasoning for this choice, is that I wanted more control over what deps were loaded before starting a program from root#2020-12-0915:50Aleedprior to Interdep, I was using :local/root deps but had to configure all my subrepo deps/aliases in root deps.edn, basically defeating the purpose of separating logic into nested projects (as they were all configured in root, anyway, and had to be run together from there)#2020-12-0915:54Alex Miller (Clojure team)trying to be a little more generic, you have one conceptual project that is broken into multiple parts (here app and api) and you're trying to manage both their independent deps, and their per-component aliases, and dep relationships between the components#2020-12-0915:55Aleedyes 🙂#2020-12-0915:55Alex Miller (Clojure team)maven-style deps are no good for dev purposes. local deps solve some problems but create others.#2020-12-1011:26oliyHi everyone, I'm pleased to announce the 0.1.3 release of https://github.com/oliyh/superlifter, a DataLoader for Clojure/script. I've done a lot of thinking with help from several people and rewritten quite a lot of code to make it much more robust, especially when handling the patterns used by a graphql server. As a result the example project showing integration with lacinia has changed to use the new feature: elastic triggers. This release adds support for: • Elastic triggers as a more reliable method for 1+n queries#2020-12-1112:32val_waeselynck@U076R6N1L Thanks, good to see generic solutions for this important problem! One piece of feedback: it would have been nice for the configuration keywords to be namespaced, e.g :superlifter.triggers/queue-size etc.#2020-12-1114:53oliyhi @U4LJRA116 thank you for the feedback, could you help me understand what the benefit would be? these keys are kept within the superlifter context and so do not need to live alongside other keywords that they might clash with#2020-12-1117:24val_waeselynck@U076R6N1L code clarity, and in particular configuration traceability. This would be useful as early as the project's README, where it would be apparent immediately which keywords are interpreted by this lib, and which are specific to the business domain. What's more, in real-world scenarii, don't underestimate how far upstream of calling the superlifter these configuration keys might end up, e.g as part of Integrant configuration files.#2020-12-1016:27blueberryCUDA 11.1 is now supported in Clojure. ClojureCUDA 0.12.0 has just been released. http://clojurecuda.uncomplicate.org https://github.com/uncomplicate/clojurecuda#2020-12-1111:47Yehonathan SharvitNew lib: defntly defntly - A library that makes the creation of defn like macros a commodity https://github.com/viebel/defntly#2020-12-1117:38Ben SlessI think there's a typo in in the readme at
catch Throwable ~e
Otherwise, cool library 🙂
#2020-12-1216:30Yehonathan SharvitThank you @UK0810AQ2. Typo fixed#2020-12-1119:38Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.10.2-rc1 is now available. This is a release candidate and we would appreciate it if you could try it in your own projects. If you encounter issues, https://ask.clojure.org is the best place to file a report (or feel free to discuss here in #clojure if not sure). Below is a changelog for 1.10.2 (items new to this release since 1.10.2-alpha4 are marked with a *): 1 Fixes 1.1 Interop / JVM • https://clojure.atlassian.net/browse/CLJ-1472 Ensure monitor object is on stack, for verifiers • https://clojure.atlassian.net/browse/CLJ-2517 More fixes for invocation of static interface methods with primitive args - thanks Nicola Mometto! • https://clojure.atlassian.net/browse/CLJ-2492 Remove uses of deprecated Class.newInstance() • https://clojure.atlassian.net/browse/CLJ-2534 Fix javadoc urls for JDK 11+ - thanks Andy Fingerhut! • https://clojure.atlassian.net/browse/CLJ-2571 Add Throwable return type hint to ex-cause - thanks Michiel Borkent! • https://clojure.atlassian.net/browse/CLJ-2572 Avoid reflection in clojure.data - thanks Michiel Borkent! • https://clojure.atlassian.net/browse/CLJ-2502 Fix reflection warnings in clojure.stacktrace/print-stack-trace - thanks Michiel Borkent! 1.2 Core • https://clojure.atlassian.net/browse/CLJ-2580 Fix case expression branch analysis that resulted in compilation error - thanks Ghadi Shayban! • https://clojure.atlassian.net/browse/CLJ-2564 Improve error message for case • https://clojure.atlassian.net/browse/CLJ-2585* nth with not-found on regex matcher returns not-found on last group index • https://clojure.atlassian.net/browse/CLJ-1364 vector-of does not implement equals or hashing methods • https://clojure.atlassian.net/browse/CLJ-2549 vector-of does not implement IObj for metadata - thanks Andy Fingerhut! • https://clojure.atlassian.net/browse/CLJ-1187 quoted metadata on empty literal colls is lost - thanks Nicola Mometto! • https://clojure.atlassian.net/browse/CLJ-2459* ExceptionInInitializerError if jars executed with java -jar - thanks Piotrek Żygieło! 1.3 Printing • https://clojure.atlassian.net/browse/CLJ-2469 Fix errors in printing some maps with namespace syntax • https://clojure.atlassian.net/browse/CLJ-1445* pprint doesn't print collection metadata when *print-meta* is true 1.4 Docstrings • https://clojure.atlassian.net/browse/CLJ-2295 Eliminate duplicate doc string printing for special forms - thanks Andy Fingerhut! • https://clojure.atlassian.net/browse/CLJ-2495* prepl docstring is incorrect • https://clojure.atlassian.net/browse/CLJ-2169* conj has out-of-date :arglists - thanks Michał Marczyk! 2 Performance • https://clojure.atlassian.net/browse/CLJ-1005* Use transient map in zipmap - thanks Michał Marczyk!#2020-12-1212:28borkdudeClj-kondo v2020.12.12 New: docs of all available linters! https://github.com/borkdude/clj-kondo/blob/master/doc/linters.md and 12 other fixed issues. Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20201212 Special thanks to Clojurists Together for being the main sponsor in 2020Q4. Happy linting!#2020-12-1212:29borkdudeCome chat in #clj-kondo if you have questions.#2020-12-1216:29Michaël SalihiFantastic, what a great addition the linting list! Thx @U04V15CAJ#2020-12-1218:20blueberryNew release of Neanderthal 0.39.0Y CUDA 11.1 is now supported. High performance matrices and linear algebra on CPU & GPU. http://neanderthal.uncomplicate.org#2020-12-1218:32djblueNew release of portal https://github.com/djblue/portal/blob/master/CHANGELOG.md#070---2020-12-12 🎉#2020-12-1320:04borkdudeBabashka 0.2.5 offers integration with tools.deps for bb scripts and for invoking a JVM clojure process: https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v025 For questions, come chat in #babashka#2020-12-1511:26practicalli-johnpracticalli/clojure-deps-edn 2020-12-15 • library version updates (see CHANGELOG) • rebel-readline REPL with Reveal (thanks to didibus) • using :replace-deps for community tools that do not require project dependencies, e.g. :project/outdated • antq pull request - now includes :replace-deps when checking for outdates library versions • documentation updates, including elaboration of possible user level configuration locations, especially XDG_CONFIG_HOME OS setting. • GitHub actions lint with clj-kondo for commits and pull requests on practicalli/clojure-deps-edn repository https://github.com/practicalli/clojure-deps-edn#2020-12-1516:07Sam RitchieVersion 0.14.0 of the SICMUtils computer algebra system for Clojure(script) is out: https://github.com/sicmutils/sicmutils SICMUtils is a scientific computing system that offers: • Symbolic expression algebra and powerful simplification routines • forward-mode automatic differentiation • ODE initial value solvers • many different definite integral methods • a full, cross-compatible numeric tower (rational numbers, complex numbers, BigInt support) for Clojure and Clojurescript Interactive REPL use and Jupyter support works; the next step is to integrate SICMUtils into #nextjournal, and build integrations that let SICMUtils act as a physics engine for three.js and other libraries like this. Come say hi in #sicmutils 👋 ,and give the full reference manual a skim for an overview of the library’s features: https://cljdoc.org/d/sicmutils/sicmutils/0.14.0/doc/reference-manual#2020-12-1517:08Alex Miller (Clojure team)Cognitect and Nubank are Sponsoring Open Source Developers https://cognitect.com/blog/2020/12/15/sponsoring-open-source-developers#2020-12-1520:55jimmyShould the links that say “sponsoring” be pointing to https://github.com/orgs/cognitect/sponsoring ? Looks like the sponsorships started today. So I’m guessing that is the case?#2020-12-1521:02Alex Miller (Clojure team)that page doesn't show anything to people outside the org as far as we can tell (we have a question in to github about that)#2020-12-1521:03Alex Miller (Clojure team)looks great for me though. wish you could see it! :)#2020-12-1521:03Alex Miller (Clojure team)maybe there is some checkbox somewhere to check, but we haven't found it#2020-12-1521:17seancorfield@U5K8NTHEZ What does that page show for you?#2020-12-1521:17jimmy#2020-12-1521:18Alex Miller (Clojure team)thanks! was just discussing w/ gh and seems like it's logged in vs logged out, to be fixed#2020-12-1521:19Ben SlessThat's amazing#2020-12-1521:25didibusThis is great, and if all these sponsors are truly 6 figures, I'm quite happy about it and what it means for the future of the Clojure tooling and ecosystem.#2020-12-1521:27Alex Miller (Clojure team)6 figures is the total, not per person :)#2020-12-1521:28Alex Miller (Clojure team)but the idea is that if every company kicked in a small percent of revenue, these people could actually make a living making tools#2020-12-1521:31Ben Sless6 figures is nothing to sneeze at. It can be 1e6, can be 5e6, too.#2020-12-1521:33didibusAh I see, well I still totally appreciate the move, and it's an amazing gesture of support.#2020-12-1521:38Alex Miller (Clojure team)Most developers are being supported at $500+/mo initially#2020-12-1521:43LasDo you accept nominations?#2020-12-1521:43Alex Miller (Clojure team)Sponsorship is not something to apply for. We make decisions on sponsorship based upon many factors.#2020-12-1521:44Alex Miller (Clojure team)If you want to sponsor someone, I encourage you to do so! :)#2020-12-1523:59pezThis is such a great move. The stance is super clear. It will be heard. Personally, I have been dancing and singing and hugging my family members for hours now. Still am as happy as when I realized Calva was selected for this. Thank you, thank you, thank you! ❤️#2020-12-1602:14mauricio.szaboAre there any plans to sponsor people that are still on the GitHub's waitlist (because their country is still not eligible)?#2020-12-1602:16Alex Miller (Clojure team)we are evaluating some alternatives for cases like that#2020-12-1617:40mauricio.szaboBTW, just saw that you're also funding via Patreon. That's great! I hope other companies follow the example 👍#2020-12-1700:06quollI want to say thank you to NuBank/Cognitect. I feel immensely privileged for this. ❤️#2020-12-1609:42javahippieclj-test-containers 0.4.0 was released! * Clojars: https://clojars.org/clj-test-containers * Changelog: https://github.com/javahippie/clj-test-containers/blob/master/CHANGELOG.md * Documentation: https://cljdoc.org/d/clj-test-containers/clj-test-containers/0.4.0/api/clj-test-containers.core The Testcontainers version was updated to the latest one, optimizations were made to copying resources to the containers, and a new function perform-cleanup! was introduced, which cleans up all resources which were created in a REPL session and could not be cleaned by the default mechanism. If you want to get a little more detail on the library, this week a session on the topic was uploaded on YouTube: https://www.youtube.com/watch?v=iViT_p02jDs#2020-12-1615:03wilkerlucio[com.wsscode/pathom "2.3.0"] is out! About this release: - If you didn't check in a while, defresolver is now smarter and can infer inputs and (some) outputs automatically, check the docstring for details - Removing alpha state from the library given it's been running without issues for a while, and API is not going to change - I expect this to be the latest feature release of Pathom, from now on its on maintenance mode and its likely to only get bug fixes from now on - reader3 is marked as experimental and its discontinued in Pathom 2, for the evolution of this use Pathom 3 Detailed changelog at: https://github.com/wilkerlucio/pathom/blob/master/CHANGELOG.md#2020-12-1719:18Alex Miller (Clojure team)New small release of clojure tools https://clojure.org/releases/tools#v1.10.1.763: • Set exit code for -X ex-info error • Sync up cli syntax for aliases in help#2020-12-1821:27vlaaadreveal New version of #reveal — https://vlaaad.github.io/reveal/ 1.2.180 — is out! This major release focuses on improving action results UI: - Reveal can now show multiple result panels, activated by Ctrl+Enter instead of Enter in the action popup; - for every result panel it can now show all tabs in that panel as a hierarchical tree. Watching ref as latest value or log of successors? Why not both at the same time!#2020-12-1821:48bedersReveal is amazing!#2020-12-1914:04bruno.bonacciJust released: μ/log v0.6.0 (https://github.com/BrunoBonacci/mulog) with the following changes • [*NEW*] Added Filesystem metrics sampler (thanks to @emlyn) • [*NEW*] Added Advanced Console Publisher with JSON formatting. • [*NEW*] Added support for Elasticsearch data-streams. (thanks to @tovieye.ozi) • [*NEW*] Added support for Nippy encoding to the Kafka publisher • Migrated to JSON encoding from Cheshire to Jasonista (thanks to @tovieye.ozi) • various other fixes (thanks to @emlyn.corrin @ak407) check the full doc here: https://cljdoc.org/d/com.brunobonacci/mulog/0.6.0/doc/readme#2020-12-2002:03mauricio.szaboJust published Chlorine version 0.10.2 - socket REPL package for Atom. On this release, only bugfixes 🙂. Only one new feature is that Chlorine is now caching clj-kondo's results for 20s, so if you have no REPL connected you can issue lots of "doc-for-var" and "goto-var-definition" and they'll resolve really fast 😄. (to be honest, I'm only caching because I'm preparing a release that will also rely on clj-kondo for autocomplete, when there's no REPL connection ready 😄)#2020-12-2002:24tony.kayFulcro’s websocket remote has been updated to support client use from CLJ. Most of Fulcro can run in a headless mode in CLJ without React. This makes it possible for you to make a CLJ Fulcro app that can communicate with a Fulcro server. You could use this, for example, to leverage the EQL/transaction processing of Fulcro in any Clojure JVM application. https://github.com/fulcrologic/fulcro-websockets#2020-12-2010:13pezCan ClojureScript apps also be using the non-react parts of Fulcro?#2020-12-2016:49tony.kayOf course#2020-12-2118:47tony.kay@U0ETXRFEW see for example: https://www.youtube.com/watch?v=ng-wxe0PBEg&amp;ab_channel=TonyKay#2020-12-2007:46Yehonathan SharvitBook excerpt: Applying Git and Optimistic Concurrency Control principles to Data Oriented Programming https://blog.klipse.tech/databook/2020/12/18/occ-do-git.html#2020-12-2014:26st3fanI wrote another GitHub App/Bot in Clojure .. it may be useful for the coming week(s) … https://github.com/marketplace/devbots-vacation#2020-12-2014:27st3fanDocumentation at https://devbots.xyz/documentation/vacation/#2020-12-2019:44JakubIntroducing Liz: A new general purpose programming language - written as Clojure look-a-like EDN - compiled down to small native binaries for x86, ARM, RISC-V, WASM and other architectures - seamless interop with C libraries - compiler written in Clojure using tools.analyzer, leveraging Zig compiler https://github.com/dundalek/liz#2020-12-2019:55eggsyntaxInteresting!#2020-12-2020:06David PhamYep, interesting.#2020-12-2023:00borkdude@U70QD18NP Looks interesting. So it's a clj -> zig transpiler basically? Why ^:pub and not just use defn- for private funs, while defaulting to public? I haven't looked at zig, but your project makes me want to take a look at it.#2020-12-2023:27Jakub@U04V15CAJ It is basically a transpiler, although clj -> zig would be an over statement, it is more like a zig dialect with some clojureisms. One of the use cases is to have a language that could be used to write native extensions for using in Clojure via JNI, so I try to keep it low level and don't include abstractions with overhead.#2020-12-2023:27JakubGreat idea with defn- , I will add that.#2020-12-2023:28borkdudeThis is interesting. I could also see myself using this to write babashka pods perhaps.#2020-12-2023:30JakubZig is pretty neat, definitely worth checking out. I wanted to see if there is something better than C for writing native code.#2020-12-2023:30JakubIt seems to tick all the boxes, good design choices and focus on simplicity.#2020-12-2023:33borkdude@U70QD18NP how does it work with the type-system bridging? clj is dynamically typed, but zig is statically typed#2020-12-2023:34borkdudeAh, I see, the type hints are translated to type info in the target#2020-12-2023:38JakubExactly, it feels like a bit of an abuse, but seems to work for now. One limitation is with more complex types, it would be good to create a DSL for it, for now it leaks a bit and one can use a string with a Zig expression for the type.#2020-12-2022:50borkdudeSmall Clojure Interpreter 0.2.0: https://github.com/borkdude/sci/blob/master/CHANGELOG.md#v020 Follow up in #sci#2020-12-2113:18miroHi folks! I have just added some simple Kafka tasklets for Titanoboa since there have been few requests for that: https://github.com/mikub/titanoboa-tasklets 🎄 Have a merry xmas week!#2020-12-2114:14juhoteperiReagent v1.0 is out: https://github.com/reagent-project/reagent/blob/master/CHANGELOG.md#100-2020-12-21#2020-12-2122:17blueberryNew release of Deep Diamond 0.17.0-alpha: CUDA 11.1 is now supported. High performance tensors and neural networks on CPU & GPU. https://github.com/uncomplicate/deep-diamond#2020-12-2205:28tony.kayI’m happy to announce Guardrails 1.1.0. Guardrails is a simple library that lets you more easily add specs to your functions, and have those checked as your program runs; however, instead of throwing an exception (as instrument does) it simply reports the problem with expound. This lets you easily see errors with data expectations as you work in development (with a stack trace), but doesn’t interfere with your flow if the problem was with your spec, and not your code (very commonly the case). The biggest problem with Guardrails to date is that a slow spec can really make your program feel unresponsive. This version contains a significant performance improvement when working with Clojure. It pushes the validations off to a separate thread so that call-site overhead when running things in your dev REPL is a constant (measured on my machine as about 3µs). The checks run in an alternate thread so you eventually see the problem, but don’t have to wait on it while you work. See the README for more details. https://github.com/fulcrologic/guardrails#2020-12-2210:11metasoarousI'm excited today to announce the release of Toto, a static site generation framework for Clojure, complete with live code reloading! https://github.com/metasoarous/toto As some of you may be aware, this functionality has existed in https://github.com/metasoarous/oz (dataviz and scientific document library) for some time now, but it has been difficult to discover or highlight given everything else Oz has to offer. My hope is that by releasing this as a separate project, more Clojurists will be able to take advantage of these features. You can get started with
clj -Sdeps '{:deps {metasoarous/toto {:mvn/version "0.0.1-alpha1"}}}'
Please give it a try and let me know what you think. Thanks!
#2020-12-2210:40fjolneActually there are others with HCR https://github.com/OrgPad-com/volcano#2020-12-2210:45metasoarousThanks for the catch @UDQ2UEPMY!#2020-12-2212:16Ertugrul CetinHi everyone, I'm thrilled to announce the release of jme-clj. This library is a Clojure wrapper for jMonkeyEngine. jMonkeyEngine is a 3D game engine for adventurous Java developers (now Clojure developers, I hope). Feel free to share your feedback! GitHub: https://github.com/ertugrulcetin/jme-clj Demo video: https://www.youtube.com/watch?v=IOPz9I49snM#2020-12-2412:45Jakub ZikaGreat news. I will bring to life all my objs from Forger app finally ;]. I am posting nice article I stumbled upon as i was reading about jmonkey engine. https://www.gamedesigning.org/engines/jmonkey/#2020-12-2213:27blueberryDeep Learning for Programmers: An Interactive Tutorial with CUDA, OpenCL, DNNL, Java, and Clojure Release Candidate 1 available for purchase https://aiprobook.com/deep-learning-for-programmers/#2020-12-2217:42jarrodctaylorThis was released last year but not announced. Ever wanted to visualize your Datomic schema? Perhaps the schema-cartographer might be of interest. https://github.com/JarrodCTaylor/schema-cartographer#2020-12-2217:51dgb23the example schema link seems to be broken! Points to: https://github.com/JarrodCTaylor/schema-cartographer/blob/master/resources/complete-example-schema.clj Should point to: https://github.com/JarrodCTaylor/schema-cartographer/blob/master/resources/complete_example_schema.clj underscores instead of hyphens#2020-12-2218:12val_waeselynck@U0508JRJC There can be good reasons to not follow the :entity-type/attribute naming convention for Datomic attributes; for such cases, it would be good to be able to annotate the entity type explicitly. Don't complect naming and structure 🙂#2020-12-2221:40HuahaiReleased Editscript 0.5.0, a library to diff/patch Clojure/script data structures. This release added the option to diff inside strings, and had major speed improvement for the diff algorithm, some data sets saw more than 2X speed up. https://github.com/juji-io/editscript#2020-12-2222:10seancorfielddepstar {:mvn/version "2.0.160"} -- https://github.com/seancorfield/depstar -- This is a major new release: depstar 2.0 behaves like a "tool" rather than a "library", so you use :replace-deps instead of :extra-deps and provide any :aliases you need as a command-line option (for -X). See below for more details of the release. Follow up in #depstar (consider this release a direct result of GitHub sponsorship by Cognitect/Nubank and five others -- thank you!). * depstar now behaves like a "tool" rather than a "library" -- you should use :replace-deps to specify it as a dependency rather than :extra-deps and it will compute the project basis from the system, user, and project deps.edn files using clojure.tools.deps.alpha. By default, it applies no aliases but you can specify an :aliases exec-arg with a vector of aliases to apply. By default, it behaves like the CLI's -Srepro option in that the user deps.edn file is ignored: specify :repro false if you want the user deps.edn file to be included in the basis. Fixes #47, #48, #49. * :compile-ns exec-arg supports a vector of namespaces to be compiled; this overrides :aot and :main-class and allows you to AOT-compile specific namespaces for inclusion in a thin JAR, if needed. Fixes #51. * The group/artifact IDs and the version can now be overridden by exec arguments (`:group-id`, :artifact-id, and :version respectively, and depstar will update your pom.xml file to match). Fixes #53. * :sync-pom true will automatically run the equivalent of clojure -Spom. See README for more details. Fixes #54. * The log4j2 plugins cache is now merged correctly. Fixes #50. * Supported entry points: hf.depstar/jar and hf.depstar/uberjar via -X, hf.depstar.uberjar/build-jar via REPL or library usage. The following legacy entry points are all deprecated: hf.depstar.jar/-main, hf.depstar.jar/run, hf.depstar.uberjar/-main, hf.depstar.uberjar/run, and hf.depstar.uberjar/run*. * Automated tests now exist, along with CI via GitHub Actions, against JDK versions 8, 11, 14, 15, 16-ea, and 17-ea. Fixes #26.#2020-12-2309:51mpenetA new version of https://github.com/exoscale/coax has been out for a while (unannounced here) - 1.0.0-alpha10 It adds caching of coercers resolution (it will parse spec forms once per spec only), so it's a massive speed increase. Be aware of how caching works when you work from the repl, you can turn it off via options. https://github.com/exoscale/coax#caching#2020-12-2309:58mpenetWe also released an initial version of https://github.com/exoscale/telex - an http client based on https://java.net.http.httpclient It's very lightweight, runs everything through an interceptor chain that you can control (using https://github.com/exoscale/interceptor). For instance by default it supports both ring1 ring2 format depending on the chain you specify. The default interceptor chain is ring1 style. You can also do things such as skipping any kind of header parsing or ring style req/resp and hit the low level java api from that chain, basically lowering "framework" overhead to almost nothing. It leverages the CompletableFutures returned by the client for the async part and also provides an api to compose these via https://github.com/mpenet/auspex (it's very similar to manifold in terms of api, but just uses completablefuture interop., so another very thin facade)#2020-12-2311:12vemvinteresting! what was the main thing that lead you to create this project?#2020-12-2311:18mpenetThe need to find a replacement for aleph http client, plus in one particular case limiting dependencies#2020-12-2311:26mpenetHaving interceptors at the bottom also, we use these quite a bit#2020-12-2311:48otfromcool. I have a new api I need to hit. 🙂#2020-12-2310:07mpenetNew version of https://github.com/mpenet/tape is out as well, using the latest ChronicleQueue/ChronicleBytes#2020-12-2312:56Jakub Holý (HolyJak)In > Chronicle Queue is similar to a low latency broker less durable.. wouldn't it be better with brokerless or broker-less?#2020-12-2313:04mpenetright#2020-12-2418:09bringeCalva version 2.0.137 is out with https://clojureverse.org/t/calva-gets-static-analysis-features-via-clojure-lsp/6939, thanks to clojure-lsp! • Go to definition/references • Peek definition/references • Find all references • Rename symbol • Change all occurrences • Hovers • https://github.com/BetterThanTomorrow/calva#demo-references-code-lens-enable-in-settings, that peek references when clicked • https://github.com/BetterThanTomorrow/calva#demo-outline Feel free to chat us up in #calva. More feature integration from clojure-lsp is on the horizon.#2020-12-2421:30borkdudeThis is really exciting!#2020-12-2421:35borkdude#2021-12-2711:54pezAnd now version 2.0.138 brings refactorings from the same source. 😄 https://calva.io/refactoring/#2021-12-2720:05bringeThese are pretty awesome#2021-12-2801:03dregreAmazing work guys.#2021-12-2811:16rfhayashi@U2M06S71C#2021-12-2715:03plexusClojurians-log, the publicly searchable archive of this Slack community, now renders emoji reactions. With thanks to @mitesh who did the bulk of the work on this. e.g. https://clojurians-log.clojureverse.org/announcements/2020-12-22#2021-12-2715:10oxalorg (Mitesh)Thanks, this was super fun to work on and definitely a team effort! parrot If anyone has some cool ideas of what we can do with the logs feel free to create an issue: https://github.com/clojureverse/clojurians-log-app/issues ^_^#2021-12-2721:13ikitommi[metosin/jsonista "0.3.0"] is out. Jsonista fast JSON decoding & encoding library for Clojure built directly on top of Jackson Databind. • updated to use latest Jackson version, 0.12.0 • BREAKING: Joda-classes are not support by default, register com.fasterxml.jackson.datatype.joda/JodaModule to add support - or use java.time classes instead. • new jsonista.tagged ns for building Transit-style tagged JSON value representations. Users have reported up to 10x better encoding throughput compared to vanilla Transit. • Jsonista just hit 1M downloads on clojars 🎉 Github: https://github.com/metosin/jsonista Big thanks to all contributors.#2021-12-2721:14ikitommiguide for the tagged json here: https://github.com/metosin/jsonista#tagged-json#2021-12-2721:56vemvThanks for pouring the json 🍻#2021-12-2722:08Karol WójcikWill tagged json get support on cljs side?#2021-12-2722:58delaguardo
(-> (keyword "x/z" "y") (j/write-value-as-string mapper) (doto prn) (j/read-value mapper) ((juxt namespace name)))
"[\"!kw\",\"x/z/y\"]"
["x" "z/y"]
using single argument for tagged form of keyword (and symbol as well) could cause problems for keywords slightly violating clojure’s reading rules I would like to suggest this form ["!kw",["namespace","name"]] for namespaced and ["!kw",["name"]] for simple keywords. I did something similar in one of my projects and nether regretted it.
#2021-12-2723:00delaguardoawesome lib btw! I already scheduled some time for “cheshire->jsonista” type of refactoring#2021-12-2723:06borkdudeWould it make sense to come up with a default scheme that would allow you to serialize EDN via jsonista as an alternative to transit, for full compatibility? Support for sets, uuids, bytes, ...#2021-12-2723:26delaguardodefinitely make sense to me, I will need it anyway#2021-12-2723:39borkdudetransonista#2021-12-2809:11ikitommi@U04V4KLKC good point about the keywords. Just merged in https://github.com/metosin/jsonista/pull/40, didn’t check if that resolves the issue#2021-12-2809:16ikitommi@UJ1339K2B cljs not planned, but interesting idea. Interested in developing the cljs-client? could be just a new ns?#2021-12-2809:17borkdude@U055NJ5CC One of the attractive properties of transit is that it is cross-language, not just clj <-> clj. So when using tags in clj, it would be nice to be able to decode this in Go or Ruby, or whatnot. Btw, this is a real problem, not just one I made up.#2021-12-2809:17ikitommi@U04V15CAJ I think there could be encoders & decoders for all common types. Also, need to handle keys too, the current impl just handles values.#2021-12-2809:18ikitommiare there any cross-language tagging conventions out there? (besided transit, which hasn’t gained much traction outside of clojure, I believe)#2021-12-2809:19borkdudebut I guess in Go you could look at your own made up tags and do the custom serialization. Good question. I think JSON schema has something around content types#2021-12-2809:19Karol WójcikWould love to, but certainly not in this year. To much consumed by studies and work ;( Anyway if this implementation could be faster than transit a lot of companies could benefit from it. Especially when doing SPA SSR.#2021-12-2809:19ikitommibtw, the tagged-json is faster than nippy in the simple benchmarks. which sounds fishy.#2021-12-2809:19borkdudehttps://json-schema.org/understanding-json-schema/reference/non_json_data.html#2021-12-2809:22ikitommiIf performance is the goal, one option is to help make the current Transit faster.#2021-12-2809:23ikitommigreat discussion, will start a Clojureverse thread out of this.#2021-12-2809:27borkdudeI've had this problem for a while https://github.com/cognitect/transit-clj/issues/43 which may be low hanging fruit to speed up transit#2021-12-2809:27borkdudeThis is due to too many flushes#2021-12-2809:41delaguardohttps://github.com/metosin/jsonista/pull/41 here is a PR to handle keyword format suggested by me#2021-12-2810:19dominicmCan this be used to build a new transit server? Then you can use the transit cljs client?#2021-12-2810:23ikitommihttps://clojureverse.org/t/tagged-json-with-jsonista-vs-transit/6946#2021-12-2810:24ikitommihonestly, haven't checked the transit internals for a while. Might be able to do a transit server, but would need to read the spec/source.#2021-12-2810:27borkdudetransit also does caching of symbols and values which compresses the payload. this is relevant for network traffic, but it may be less good for performance. so it's good take make explicit what you are optimizing for#2021-12-2810:28delaguardohttps://github.com/cognitect/transit-format#recursive-tag-based-encoding there are two formats missing in jsonista: • string-based encoding • object-based encoding #2021-12-3112:35roklenarcicI think transit might have ability to represent recursive data structures, which JSON lacks?#2021-12-2817:11bozhidarCIDER 1.0 is out! You can read more about the release here https://metaredux.com/posts/2020/12/28/cider-1-0.html Cheers! cider#2021-12-2817:25eggsyntaxCongratulations, and thanks for your sustained stewardship and work on it!#2021-12-2822:54pezSo awesome, @U051BLM8F! Thanks for providing!#2021-12-3123:18Steven Deobald@U051BLM8F It’s not an overstatement to say we built a significant part of nilenso’s early Clojure business thanks to CIDER and, nearly a decade later building tools for non-profits instead, it’s again an essential for me. Thank you so much. 🙂#2021-01-0108:26bozhidarYou're welcome! cider#2021-12-2912:10borkdudeBabashka v0.2.6 released: https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v026 The main new feature in this release is the pod registry: https://github.com/babashka/pod-registry This allows you to use pods without having to install them using a separate package manager: https://book.babashka.org/#_pod_registry. Join #babashka for discussion.#2021-12-2913:51ericdalloReleased 20201229T134026 of clojure-lsp which adds more https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens and enable it by default 🎉 For more information check #lsp#2021-12-3012:41jacekschae🎉 The Learn Reitit course is ready 🎉 All videos have been uploaded ~ 9h. You can still grab it with an early access price . Big thank you to @ikitommi @seancorfield James R and @thheller for their feedback and support! https://www.learnreitit.com#2021-12-3116:45borkdudeOne last time this year! @rahul080327 and I are happy to announce the babashka sqlite3 pod! https://github.com/babashka/pod-babashka-sqlite3#2021-12-3116:45borkdudeThe pod is self-contained, no need to install sqlite3 on your system. Implemented in golang and uses transit for communication. Even blobs work. Join #babashka for discussion.#2021-12-3117:13pezYou can do one more, I am sure, @U04V15CAJ 😃#2021-01-0113:12benedekHNY release of mranderson: https://github.com/benedekfazekas/mranderson/blob/master/CHANGELOG.md#052 mranderson is a dependency shadowing and inlineing tool. specially interesting for tooling development but could be helpful for anything enjoy :)#2021-01-0211:33borkdudeAnnouncing the puget CLI: https://github.com/borkdude/puget-cli The primary use case is to pipe EDN to it and get pprinted + colorized output. This composes well with other clojure CLI tools like jet, clj-kondo and bb. It can be installed using brew on linux and macOS and scoop on Windows.#2021-01-0223:26littlelihttps://github.com/littleli/scoop-clojure/pull/139 🙂#2021-01-0214:15borkdudeAnnouncing the carve CLI: https://github.com/borkdude/carve#cli Carve is a tool to remove unused vars from your project. Have fun!#2021-01-0223:24littlelihttps://github.com/littleli/scoop-clojure/pull/140 🙂#2021-01-0311:47practicalli-johnExcellent, I'll promote it from the experimental aliases in the Practicalli deps.edn config. :project/unused#2021-01-0400:58simongrayI compiled a list of Clojure resources for domain-specific languages and parsing: https://github.com/simongray/clojure-dsl-resources Suggestions are very welcome. I’m just a lowly programmer trying to educate myself about this space.#2021-01-0408:47borkdudeMade some suggestions: https://github.com/simongray/clojure-dsl-resources/issues/1#2021-01-0409:12ikitommimaybe routing libs should be included? compojure, bidi, reitit etc.#2021-01-0409:42simongray@U055NJ5CC I’ll consider that. I don’t think they should go in the regular data-based/classic DSL subcategories, but perhaps they could get a separate section?#2021-01-0411:29ikitommi:thinking_face: both ok, I think. Would be easier to compare if they were under same category.#2021-01-0411:33borkdudeimo, routing dsls are just as dsl as html dsls#2021-01-0418:42eggsyntaxGreat to have a centralized list of Clojure DSL stuff -- thanks for putting it together!#2021-01-0420:47simongray@U077BEWNQ NP! They’re a useful way for me to get an overview too.#2021-01-0420:52simongray@U04V15CAJ Part of the tricky part of defining a DSL in Clojure is that everything blends together. I think there’s a meaningful distinction with the way one uses (what I would call) a DSL and then configuration for a web service. The former is used adhoc in various places, while the latter is often has a much simpler grammar and is more situated in the application process.#2021-01-0420:55simongrayIs a hash map used to describe a web service a DSL? I would argue that it definitely could be, but only if it’s used in a distinctly different way from how hash maps are typically used. A DSL sort of requires a grammar that is different from the typical usage of language constructs.#2021-01-0420:59borkdudeI'm not so sure where to draw the line. The below stuff looks like hiccup to me, but for routing (this is bidi):
[""
 [[["/users/" :user-id]
   [["/topics" [["" :topics] ["/bulk" :topic-bulk]]]]]
  [["/topics/" :topic] [["" :private-topic]]]
  ["/schemas" :schemas]
  [["/orgs/" :org-id] [["/topics" :org-topics]]]]]
#2021-01-0421:01borkdudeOften a distinction is made between eDSLs (using language constructs) and DSLs (usually in text). Almost everything in Clojure is an eDSL if you use data to describe something#2021-01-0421:24simongrayI mean that is definitely different from typical usage of vectors, but all it really does is define a tree of routes. Most of what the more data-oriented web libraries do is to combine something like that bidi example with some regular old maps. Is that really a DSL? I think it’s great that Clojure is so focused on data > function > macros, but I think something that is singular in purpose and which can be parsed in a few lines of code can hardly be called a DSL. Something like Hiccup is obviously simple-looking too, but it also comes with - obviously inherited from HTML and XML - a very rich set of semantics and additional syntax, even though on the surface it’s just a bunch of [:tag {:attr ...} [:child ...]]. When you write Hiccup, you’re painting a web page. When you write a bidi route, you’re writing a bidi route.#2021-01-0421:25simongrayNot knocking on bidi, reitit, pedestal, compojure and so on AT ALL, but I think they’re quite different.#2021-01-0421:26eggsyntax> Often a distinction is made between eDSLs (using language constructs) and DSLs (usually in text). Almost everything in Clojure is an eDSL if you use data to describe something Seems worth mentioning here (for anyone who hasn't read it) Martin Fowler's book Domain Specific Languages, which I believe initially coined that external/internal DSL distinction, and which IMHO is indispensable for anyone diving into DSLs.#2021-01-0421:28simongrayThanks, I’ll check it out 🙂#2021-01-0421:29simongray(on to the Tsundoku pile it goes :P)#2021-01-0421:35borkdude@U4P4NREBY I still don't really see the difference. The interpreter (or compiler) for reitit routes is quite sophisticated, althought their notation is very simple. So yeah, you could argue, is JSON/YAML/hiccup vector/maps config a DSL when there is a complex interpreter behind it, or what makes the DSL a DSL in that case?#2021-01-0421:37borkdudeIs a Dockerfile a DSL because of the machinery behind it or because of the superficial syntax? And what if you write this Dockerfile in JSON or YAML, is it then a config file or still a DSL?#2021-01-0421:54simongrayI would definitely say that a Dockerfile is a DSL since there are both very specific semantics and syntax involved and the purpose of a Dockerfile is varied enough that I would call it a distinct language. If you write a Dockerfile in a different language, then yes, that’s a DSL too, because you’re still writing using the Docker semantics and some slightly different syntax. At some point a cut has to be made, though. What about a path in a file system? Is that a DSL? I mean, it is a language of sorts. You can compose layers of file system navigation using slashes and there are operators, e.g. .. to backtrack. But all you’re really doing with this language is define routes - kinda like bidi. So using a loose definitions of what makes a DSL, a file path is a DSL and a bidi route is a DSL too. To me, a DSL is not just something that does one very simple thing. If we’re being really pedantic about it, sure, we could always define a DSL to be that. I think that’s setting the bar a bit too low. There has to be cutoff point. Yours is definitely in a different place than mine and that’s okay :-)#2021-01-0422:00simongrayObviously, DSLs are usually meant to do very specific things, so I’m not saying that the purpose of the DSL can’t be simple, but if its grammar is incredibly basic too… then the number of items in the list will definitely need to be of a different magnitude entirely. I’m not sure it would be fit for the purpose I had for it any longer (documenting DSLs in Clojure and tools for making them).#2021-01-0422:02simongrayThat said, I am definitely considering adding a separate section for data-oriented configuration and alike, since it’s so common in Clojure.#2021-01-0422:03borkdudeSo is deps.edn a DSL: the machinery behind it is certainly not trivial, but the data format is "just EDN". Same with writing Docker semantics in JSON. It's very blurry.#2021-01-0422:03simongrayIt’s definitely blurry. I already have a disclaimer in the list about that > In either case, a supposed DSL could just as easily be considered a creative use of existing language features or a particularly well-designed API.#2021-01-0422:04borkdudeThanks for the interesting discussion :)#2021-01-0422:04simongrayYou too. 😉 thanks for making cool stuff.#2021-01-0422:47simongray@U055NJ5CC @U04V15CAJ here’s where I ended up putting it https://github.com/simongray/clojure-dsl-resources#data-oriented-configuration#2021-01-0518:29Vincent Cantin@U4P4NREBY Minimallist is missing in the list.#2021-01-0519:11Vincent Cantin@U4P4NREBY Girouette might also be relevant for your list https://github.com/green-coder/girouette#2021-01-0601:01simongrayI added minimallist and vrac (under a new WIP section) since I found the idea really fascinating. On the other hand, I’m not really sure what girouette even does, so I left that out for now.#2021-01-0601:02simongray@U8MJBRSR5 https://github.com/simongray/clojure-dsl-resources/commit/361a6679e83d1389f8fdf7a3e0ebb86b1a32b2ec#2021-01-0601:04simongrayalso, your taiwan example in the diffuse readme made me chuckle 🙂#2021-01-0603:16Vincent CantinMinimallist, Diffuse and Girouette were all developed with the purpose if being useful for Vrac - that's the underlying bigger picture. I will document and present Girouette next week, will send you the link once ready.#2021-01-0408:29emil0rhttps://github.com/emil0r/ez-wire updated to 0.2.1 and new fancy documentation/demo showing the library in action. I also made a very bad logo o_O#2021-01-0411:13henryw374https://github.com/henryw374/cljc.java-time version 0.1.12. • the major news is that you get helpful error messages (which are lacking in java.time). This is yet another reason to prefer this lib over plain interop with java.time - blogged about here: http://widdindustries.com/why-not-interop/ • also removed is the use of compile-target macros - which should speed things up for babashka users #2021-01-0411:17borkdude
(require '[babashka.deps :as deps])

(deps/add-deps '{:deps {cljc.java-time/cljc.java-time {:mvn/version "0.1.12"}}})

(require  '[cljc.java-time.local-date :as ld])

(def a-date (ld/parse "2019-01-01"))

(ld/plus-days a-date 99)
$ time bb /tmp/jtime.clj
#object[java.time.LocalDate 0x35095813 "2019-04-10"]
bb /tmp/jtime.clj   0.03s  user 0.02s system 89% cpu 0.049 total
#2021-01-0411:28henryw374cheers. yeah It's always going to be slower than (.parse java.time.LocalDate "2020-02-02") (about 3x on my machine) ,on bb because it has to interpret a bunch more code first etc#2021-01-0411:43borkdudewell, it's still fast :) and writing clojure can be more friendly#2021-01-0411:44borkdudeI see about 10ms speedup between .11 and .12 on my machine#2021-01-0411:46henryw374:thumbsup:#2021-01-0420:14slipsethttps://github.com/slipset/deps-deploy/ version 0.1.5 • support for -X, thanks to @rickmoynihan • support for private s3 repositories, also thanks to @rickmoynihan Thanks to @nichols1991 for pushing this release across the finish line and also for providing the upgrade to the s3-wagon dep so it also works with Java 10. Any errors are mine.#2021-01-0508:35rickmoynihanThanks for getting this merged!#2021-01-0516:01mike_ananevNew version 0.1.3 of Context library. https://github.com/redstarssystems/context Added: • feature toggling. now component may have new status `:disabled`. During the system start any disabled components will be ignored (start/stop functions will not run). To disable a component just add to components' config map a key `:context/component-disabled`and `true` as a value. • EmptyState. During the system stop, any stopped component now has state value as EmptyState class. This prevents poorly understood NPE if someone calls methods on the stopped component. #2021-01-0516:16afryHello fellow Clojurians! Sorry if this isn't channel appropriate, but I've got a "project" of sorts that I'm starting up this week. I'm embarking on a project called "12 startups in 12 months," which, as you may have gleaned from the title, is going to consist of building, promoting, and releasing a tech startup each month for a whole year. I've been really keen on getting into Clojure for a long time now, and I'm finally taking the plunge and will be building all of the apps in Clojure and ClojureScript. Given that I'm more or less a beginner, it may take a little bit for me to get up to speed, but I'm banking that the quick learning curve for the language and the awesome flexibility and rapid development possibilities it has will work out in my favor in the end. If you'd like to check out the stream, head over to my Twitch page: https://www.twitch.tv/a_fry_ . I'm streaming as we speak!#2021-01-0516:17wilkerluciohello, this channel has the focus on library releases, I believe #news-and-articles is a more appropriated channel 😉#2021-01-0516:18wilkerlucioaltough given its a project, feels like gray area, hehe#2021-01-0516:18afryAh great, thank you!#2021-01-0516:19afryYeah, I admit it treads a fine line, but I figure the focus on Clojure for the stream would make it an ok post. Appreciate the link#2021-01-0517:28pezAwesome project at that. Will be cool to follow. Never heard of serial entrepreneurship on this level. 😃#2021-01-0519:38simongrayGood luck. What’s your schedule gonna be like? Also why not announce it on https://www.reddit.com/r/Clojure/ too?#2021-01-0519:49afryI am streaming as we speak @U4P4NREBY! And I just added a schedule for future streams, which you can check out here: https://www.twitch.tv/a_fry_/schedule So far I'm committing to 9:30 AM EST Monday-Friday, but I should have some afternoon sessions as well 🙂#2021-01-0519:50simongrayBut that is afternoon. Well, it is to me, it’s 15:30 CET 😉#2021-01-0519:52afryHaha, all the better. Maybe I'll get most of my viewers from EU countries when you all get off of work for the day.#2021-01-0617:02afryHey everybody, first day of livestreaming went very well! I've also set up a blog in the meantime if you're interested in following along with it. So far it's just a summary of the project and a link to the livestream, but I plan on making weekly updates as we get deeper into the process. https://startupinamonth.net/livestream-is-up/#2021-01-0617:02afryI've also got slack channel that you can join if you'd like to follow along there as well: #startup-in-a-month#2021-01-0516:43Alex Miller (Clojure team)spec.alpha 0.2.194 and core.specs.alpha 0.2.56 are now available. the only real difference is bumping Clojure dep to 1.10.1. Importantly, spec.alpha is AOT compiled and this change from Clojure 1.9->1.10.1 also covers the Clojure compiler update to emit Java 1.8 bytecode instead of Java 1.5 bytecode. What does this mean for you? Hopefully absolutely nothing because the bytecode is essentially the same (other than stackmap frame stuff). We will be using these deps in Clojure 1.10.2. Generally, you should not need to do anything to get these deps as they are dependencies of Clojure itself.#2021-01-0606:25HuahaiReleased Datalevin 0.3.15, a simple, fast and durable Datalog database. This release introduced significant write speed improvement by using writable memory map and asynchronous writes. Writes can be two orders of magnitude faster for small transactions. https://github.com/juji-io/datalevin#2021-01-0608:58simongraydoes this make it faster than DataScript for writes now?#2021-01-0608:59simongrayAlso good job on the steady release schedule!#2021-01-0615:58HuahaiIt is now only slightly slower than Datascript for write transactions, as expected, for Datalevin writes to disk whereas Datascript is in memory.#2021-01-0615:59Huahai2s vs 0.5s#2021-01-0616:41simongrayNot too shabby! My comment was probably meant a little tongue-in-cheek. You seem very intent on getting good performance out of your various OSS projects. It’s very commendable.#2021-01-0617:27HuahaiThanks. Performance does matter for a lot of use cases, especially when dealing with data. What’s that saying? Database people care about three things: performance, performance, and performance. 🙂#2021-01-0609:02Chris McCormickHey all, just a quick note to let you know about this procedural MIDI melody generator I built with ClojureScript and am releasing today. https://dopeloop.ai/melody-generator Enjoy!#2021-01-0612:45borkdudeWe (@jeroenvandijk@rahul080327@valtteri and myself) are happy to announce the babashka aws pod! Access AWS directly from babashka scripts with virtually no startup time, accessing all the services that the Cognitect aws-api lib provides access to. https://github.com/babashka/pod-babashka-aws#2021-01-0613:13Ben SlessOne step closer to Clojure everywhere. Next stop - devops!#2021-01-0617:10fjolne@UK0810AQ2 btw we already have Ansible substitute https://github.com/epiccastle/spire
#2021-01-0617:14jeroenvandijkYeah waiting for a spire pod so I can create a packer replacement 😅#2021-01-0617:43Ben Sless@UDQ2UEPMY I even had it starred! I remember spire since it had a disclaimer back in the day, haven't been keeping track. I'm just happy devops can now use babashka to whip up quick scripts, not just use a buy-in framework#2021-01-0618:16Jakub Holý (HolyJak)Whaaat? Is it Christmas already again?#2021-01-0618:34borkdudeIt's 2021!#2021-01-0618:37Ben SlessIt is Dec. 37th 2020#2021-01-0618:18Alex Miller (Clojure team)https://clojure.org/releases/devchangelog#v1.10.2-rc2 is now available. Changes from rc1: • https://clojure.atlassian.net/browse/CLJ-2597 proxy should emit Java 1.8 bytecode • https://clojure.atlassian.net/browse/CLJ-2599 Bump spec.alpha dep to 0.2.194 and core.specs.alpha dep to 0.2.56 Please report any issues (or success!) either in thread here or in #clojure - thanks!#2021-01-0618:51seancorfieldJust bumped our dev env to RC 2. Will let you know if anything weird happens.#2021-01-0701:43nnicholsHowdy! I’ve built a GitHub Action to check your deps.edn files for outdated dependencies, and to automatically create PRs for each upgrade. Give it a try: https://github.com/nnichols/clojure-dependency-update-action • Thanks to @tessellator for the original shell script this was based off of!#2021-01-0701:52ericdalloReally cool! Does it checks for already open PRs by the GH action itself? Otherwise, each push it'll open a PR? 😅#2021-01-0701:55nnicholsThe branch names for each old-version:new-version pair would be identical, and the github cli accurately prevents you from opening more than one PR against a single branch.#2021-01-0701:56nnicholsIt ought to log a message that the PR exists and move on to the next stale dependency iirc#2021-01-0702:28uochanCool! I'll add a refence to antq's README (PR is also welcomed!) https://github.com/liquidz/antq#github-actions#2021-01-0702:39ericdalloAmazing @UCZ5ZDJKF!#2021-01-0702:39ericdalloI'll try to add it to clojure-lsp later, thanks!#2021-01-0714:30benedekthat is nice#2021-01-0712:35ericdalloRelease version 2021.01.07-12.28.44 which adds a new "add-import-to-namespace" refactoring and if it's a common import `clojure-lsp` will suggest to add via code action 🎉 Check #lsp for more information#2021-01-0712:37borkdudeSome people have complained in #community-development about the frequency of some updates here for the same projects. I notice your last update was a week ago. I personally don't mind this, but for the people who do, I have made the #releases channel, to post smaller "in-between" updates. Just FYI. /cc @U45T93RA6#2021-01-0712:40ericdalloOh, good point @U04V15CAJ, sorry for that I thought this channel was exactly for that, but it seems a #releases would fit better, thanks for the heads up, I'll post there from now 😄#2021-01-0713:04pezPlease don’t stop posting here as well now and then. For me personally, I prefer quite often. (Even once a week 😄 ) Releases of tools that make Clojure coding better should be celebrated!#2021-01-0713:09ericdalloThank you @U0ETXRFEW! I'll probably try to merge features releases into a single release to avoid too many releases#2021-01-0713:14pezI think we shouldn’t keep value from reaching our users. But, yeah, finding a good balance in what this or that target audience is interested in hearing about is tricky. We learn as we go, I guess.#2021-01-0713:25borkdudeFeel free to do what you want, I personally don't mind, just thought I should mention #releases as well, just in case you want to use it ;)#2021-01-0715:08orestisWhat editor is this?#2021-01-0715:12pezAll the editors! 😃#2021-01-0715:13orestisHaha sorry I meant on the gif. Can’t tell if it’s a fancy vim or Emacs 😎#2021-01-0715:16pezI sort of knew you did. But had to pretend to not understand, in order to make the joke. 😃#2021-01-0715:17ericdallohahaha it's Doom Emacs @U7PBP4UVA, if you liked you can check my config on https://github.com/ericdallo/dotfiles#2021-01-0715:26borkdudeDoes it support doom-scrolling?#2021-01-0715:28ericdalloI don't know what is this doom-scrolling @U04V15CAJ :thinking_face:#2021-01-0715:29borkdudeIt is a new word I learned yesterday night#2021-01-0715:29pezMaybe it is this? https://www.wired.com/story/stop-doomscrolling/#2021-01-0715:32ericdallohahaha got it, yeah it's supports @U04V15CAJ 😂#2021-01-0803:41seancorfieldAs a general rule of thumb, if you can still see an earlier announcement about your project in the scrollback on #announcements you should post it in #releases instead. Once your last announcement drops off the scrollback, feel free to post in #announcements again.#2021-01-0722:50nnicholsIf you primarily maintain the version of your artifact in a pom.xml, I wrote a short GitHub action to respond to commit messages and perform the appropriate version bump against said pom. https://github.com/nnichols/maven-version-bump-action#2021-01-0803:41seancorfieldAs a general rule of thumb, if you can still see an earlier announcement about your project in the scrollback on #announcements you should post it in #releases instead. Once your last announcement drops off the scrollback, feel free to post in #announcements again.#2021-01-1019:21slipsethttps://github.com/clj-commons/byte-transforms is released at 0.1.35 This is the first release of byte-transforms under clj-commons, after it was transfered to clj-commons from ztellman. Other than new coordinates, apache-commons/commons-compress was bumped to last version. Also, versioning scheme has been changed to major.minor.commit-count. Enjoy Ps. this release is untouched by human hands, build, signing, and release to clojars all done on circle. I just pushed a release-tag to github.#2021-01-1307:51ingesolhttps://github.com/ingesolvoll/kee-frame got a new release (1.1.2), with very minor updates. Also, another reminder that kee-frame 1.x requires re-frame 1.x.#2021-01-1311:05RollACasterA month ago I announced a first minimal version of https://rollacaster.github.io/hiccup-d3/with only 2 charts. Now there are 14 chart types to build D3 charts in CLJS and some comfort features like D3 API-Docs per chart 📊📈 https://github.com/rollacaster/hiccup-d3#2021-01-1411:46Dainius Jocashttps://github.com/dainiusjocas/lucene-grep Lucene based grep-like utility compiled with GraalVM native-image. Grab a binary and tell me what you think. Cheers!#2021-01-1411:50borkdudewow, awesome :)#2021-01-1411:52Dainius Jocasthanks!#2021-01-1411:52borkdudeIf I do this in a Clojure repo:
lmgrep "select-keys" .
should this work? it turns up empty
#2021-01-1411:53borkdudeI would expect it to search the dir recursively#2021-01-1411:54Dainius Jocasthe problem is with the . at the end#2021-01-1411:54Dainius Jocasas of now the file pattern is GLOB#2021-01-1411:54tvaughanSuper cool! Would it be possible to output the "score" associated with each match?#2021-01-1411:54borkdudethe problem with glob is always: is it recursive or not? this is always different per platform#2021-01-1411:55Dainius Jocas@U04V15CAJ if you specify then it is recursive#2021-01-1411:55borkdudethis also doesn't return anything for me:
lmgrep  "keys" **/*
#2021-01-1411:56borkdudeOh I see:
lmgrep  "keys" "**/*"
I should quote the glob pattern
#2021-01-1411:56borkdudeyes, that works, perfect#2021-01-1411:57Dainius Jocas@U04V15CAJ yeah, put the GLOB in double quotes 😉#2021-01-1411:58Dainius Jocas@U0P7ZBZCK as of now it is not supported, but there is a Class in Lucene that does just that, so it is possible#2021-01-1412:00Dainius Jocas@U04V15CAJ for code search I'd suggest to specify the letter tokenizer, because the default analyzer doesn't split text on ., which is a bit unexpected IMO, e.g. lmgrep --tokenizer=letter "select-keys" "**.*"#2021-01-1412:01borkdudeyeah. it would be cool if the score was returned as @U0P7ZBZCK suggests and EDN output would also be nice, so you could sort the results (e.g. pipe the results to babashka and then do some processing)#2021-01-1412:06Dainius Jocas@U0P7ZBZCK,@U04V15CAJ, I agree that it would be nice to sort on score, but hint me how would you like the output to look like?#2021-01-1412:07borkdudeprobably just maps with :file, :line, :column, the line :text (optionally) and :score?#2021-01-1412:07borkdudeI would just output the maps on the fly, streaming, not wrapped inside a collection#2021-01-1412:08borkdudemaybe one map on each line#2021-01-1412:10Dainius JocasGot it. So I imagine it will be something like lmgrep --with-score "query" GLOB , i.e. under a flag#2021-01-1412:10tvaughanAssuming compatibility with grep isn't a concern and results are sorted by score: [SCORE]:[FILE_PATH]:[LINE_NUMBER]:[LINE_WITH_A_COLORED_HIGHLIGHT] . I personally don't have much of a preference. I could awk/cut the output easily enough. As @U04V15CAJ suggests, edn output would be super helpful#2021-01-1412:12borkdude@U0FT43GKV Maybe you can make this more flexible by allowing a --columns argument with a comma separated list of options, which also determines the order#2021-01-1412:13borkdudeor even better, a template:
--template "{{score}}:{{file}},{{line}}:{{column}}:{{text}}"
#2021-01-1412:14borkdudeand you can have {{text}} or {{colored-text}} if you want one of both#2021-01-1412:14borkdudeor maybe --no-colors should just be an option#2021-01-1412:15Dainius JocasYeah, I was thinking about a template or a pattern as an option 👍 left it out for the first iteration#2021-01-1412:18borkdudeI support something similar in clj-kondo#2021-01-1412:19borkdudehttps://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#print-results-with-a-custom-format#2021-01-1412:20Dainius JocasNice! I'll shamelessly copy it as much as possible 😄#2021-01-1514:50tvaughanThat was fast, @U0FT43GKV! https://github.com/dainiusjocas/lucene-grep/commit/4e4556b7602e21aa4188f30c788e56e98a74220e 🔥#2021-01-1514:51Dainius JocasIt was not complicated 😄#2021-01-1514:52Dainius JocasHowever, the issue is that with the default Lucene I can get either Scoring of highlighting facepalme#2021-01-1514:53Dainius JocasI have to implement a class that does both 🙂#2021-01-1514:54Dainius Jocas@U0P7ZBZCK the feedback is welcome 😉#2021-01-1515:00tvaughan🙂 Scoring is more important to me. And normalization of scores too. From my prior experience with Elasticsearch, I remember that scores across indicies were not comparable. I'm hoping scores across different files are 🤞 Again, thanks for taking the time to create lmgrep, @U0FT43GKV#2021-01-1515:27Dainius JocasYeah, with elasticsearch score are not comparable not only between indices but also between fields within an index 🙂#2021-01-1515:29Dainius JocasThe scoring with lmgrep is with gotchas. As of now, every line is scored separately. Every line is treated as a document with one field. The temporary index is being created with that one document. Then the query is run against that temporary index.#2021-01-1515:36tvaughanInteresting. Thanks for sharing these details#2021-01-1611:08Dainius JocasI plan to write a blog post on the details in the coming week#2021-01-1417:15Alex Miller (Clojure team)It's that time of year again - the https://www.surveymonkey.com/r/clojure2021 is now open! We would love to get your feedback from all Clojure/ClojureScript/ClojureCLR users. Takes < 10 minutes and we release all the data. Please share with your colleagues who might not be seeing it in forums like these.#2021-01-1417:26mynomotoI wonder if babashka should be a dialect option.#2021-01-1417:34Alex Miller (Clojure team)I will make a note to consider for next year#2021-01-1417:42dharriganMay I suggest something too, or would you perfer another way of suggesting an addition?#2021-01-1417:48Alex Miller (Clojure team)here's fine#2021-01-1417:48dharriganCould you add in "Insurance" as an sector/industry for next year.#2021-01-1417:48dharriganhuuuge area 🙂#2021-01-1417:49Alex Miller (Clojure team)please add that as an Other response - I look at those every year and anything with high responses I add for the next year#2021-01-1417:49dharriganno problemo#2021-01-1417:50Alex Miller (Clojure team)Other for that particular question that is#2021-01-1417:50dharriganunderstood#2021-01-1417:50Alex Miller (Clojure team)I review all of those from prior year#2021-01-1417:50Alex Miller (Clojure team)Insurance was only mentioned 8 times last year in the other responses#2021-01-1417:55otfromif only there was some way you could have been ready for the risk and claimed some kind of compensation (sry, sry)#2021-01-1418:50pezNeed better tutorials / guides. For me it is rather “Need more tutorials / guides”.#2021-01-1505:20p-himikSeems like I don't know something but it's hard to find out about it. Q24 lists both "Browsers" and "Chromium". Is there something named "Chromium" that's not a browser? Or was the intention to figure out how many people target Chromium specifically? If it's the latter, then why knowing that is important?#2021-01-1510:46dgb23I also think babashka should be in there! Mabye even clojerl?#2021-01-1513:53Alex Miller (Clojure team)as mentioned above, added babashka for consideration next year. I don't think anyone is actually using clojerl in anger.#2021-01-1513:54Alex Miller (Clojure team)@U2FRKM4TW I think Chromium can be used independently as a component? David Nolen requested that, can't remember now why#2021-01-1515:47p-himik@U050B88UR Could you please comment on the above? I'm genuinely interested but can't find any information.#2021-01-1511:56mpenethttps://github.com/exoscale/coax 1.0.0-alpha11 is out (bugfix release)#2021-01-1512:04mpenethttps://github.com/mpenet/alia 5.0.0-alpha3 is out It adds supports for cassandra 4.x - the internals changed massively (tons of improvements), the surface api of alia is very similar to 3.x, it's still compatible with https://github.com/mpenet/hayt. Feel free to kick tires!#2021-01-1514:07Alex Miller (Clojure team)another reminder for those closing out the week in Europe... State of Clojure survey is open now! https://www.surveymonkey.com/r/clojure2021#2021-01-1516:02Alex Miller (Clojure team)https://twitter.com/richhickey/status/1350110634776657920#2021-01-1516:14bartuka... and now we are enlightened.#2021-01-1517:38hlshipYou realize his secret agenda will be to try and turn Clojure into Prolog, right?#2021-01-1520:44hlshipI mean, he did turn Scala into BASIC#2021-01-1520:49Alex Miller (Clojure team)he's been forgiven for that#2021-01-1516:22victorbHeya folks! I took all the advice I heard about networked Clojure REPLs and went straight for the other way. Here's a project where the community gets to submit commands to be run in the REPL, and get to vote on other commands to be run. Lot's of fun to create, only ~2 hours of programming. You can find a screenshot here: https://twitter.com/VictorBjelkholm/status/1350114553342910468 Actual application is deployed here: http://livingthing.club/#2021-01-1517:37Ben SlessThis is like Twitch Plays but with a REPL. Groovy 🙂#2021-01-1519:09Alex Miller (Clojure team)https://clojure.org/releases/devchangelog#v1.10.2-rc3 is now available, only change was making some recent changes in the test suite platform-independent. Should be no changes since 1.10.2-rc2 as far as your perspective, but would be happy to have you re-try it regardless. If you do, please this announcement! If you have issues, please comment in thread or ask at https://ask.clojure.org#2021-01-2014:06Alex Miller (Clojure team)Good morning all! Just a reminder that the 2021 State of Clojure survey is open and we'd love to have your feedback! https://www.surveymonkey.com/r/clojure2021#2021-01-2019:18borkdudeClj-kondo v2021.01.20 New: unresolved var linter and various other improvements! See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#unresolved-var for details. Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20210120 Step by in #clj-kondo for questions.#2021-01-2019:20borkdude#2021-01-2312:17iarenaza@U04V15CAJ Docker image for this version seems to be missing in Docker Hub?#2021-01-2312:24borkdude@U8T05KBEW we moved Docker images to the cljkondo organization now instead of the borkdude org: https://github.com/clj-kondo/clj-kondo/blob/master/doc/docker.md#2021-01-2319:59iarenazaWhoops! I hadn't noticed it. Sorry for the noise 😅#2021-01-2319:59borkdudeNo worries#2021-01-2021:37uochanJust released vim-iced ver 2.7.4, Clojure Interactive Development Environment for Vim8/Neovim. https://github.com/liquidz/vim-iced Support jumping to local vars! This feature is powered by clj-kondo v2021.01.20#2021-01-2021:37uochanhttps://twitter.com/uochan/status/1352006866419650560#2021-01-2115:45mkvlrHey folks 👋 Happy to announce we’ve finally shipping nextjournal/clojure-mode a decent Clojure/Script editing experience in the browser, both on Nextjournal and as an open source extension for CodeMirror 6: • :woman-juggling: https://nextjournal.com/try/mk/rule-30🐙 https://nextjournal.github.io/clojure-mode/📺 https://twitter.com/mkvlr/status/1352274315354529792📜 https://nextjournal.com/blog/clojure-mode I’ve you’ve played with Clojure on Nextjournal and found it meh, now’s the time to try again. Follow-up and questions in #nextjournal#2021-01-2118:43kwrooijenJust released a new version of Gungnir - A fully featured, data-driven database library. https://github.com/kwrooijen/gungnir This release adds two crucial features: Transactions and Migrations. Both solutions are data-driven and are documented in the guide https://kwrooijen.github.io/gungnir/guide.html#2021-01-2118:50hlshipA brief glance looks to me like you've been getting idea from Elixir/Ecto?#2021-01-2118:51kwrooijenYep! Ecto is also mentioned in the README 🙂#2021-01-2212:51miroHi Clojure folks! 👋 Titanoboa 0.9.1 is out! 🎉 https://github.com/mikub/titanoboa Most notable new features: • Ability to suspend/resume workflow jobs • Adding a new API endpoint to stop particular worker • Ability for workers to self-initiate restart in case of a fatal error. • Support for private s3 mvn repos#2021-01-2214:03jsyrjalaVery interesting. Can you schedule steps in the workflow? e.g run the next step of a workflow for example 7 days from now? For polling type of functionality.#2021-01-2214:43miro@U1G5P6G0L currently this is not there, but I have heard this type of requirement few times already so it might be worth adding. Feel free to drop a note in the github discussions or submit an issue so as I won't keep lose track of it.#2021-01-3120:59firstclassfuncHello @U5L1P2D9U Just started digging into this really love it, was wondering if you think it makes sense to have a library of workload functions that can be created and used in the platform without require a customer library.#2021-01-3121:00miro@UMFRQDVU1 thanks, glad you like it! I started putting some to this git repo: https://github.com/mikub/titanoboa-tasklets#2021-01-3121:03miroI probably should add more, but then it is also super easy to create new ones. Also you can do really lots of stuff with just the http client ( https://github.com/mikub/titanoboa-tasklets#http-client- ) - pretty much any API call you can do just by tweaking what url it should call...#2021-01-3121:03miroAlso if you create anything useful feel free to do a pull request.#2021-01-3121:04firstclassfuncI do want to compose my own and wrap some of the http calls since they aren’t always usable without some transformations. Seems that I have to write workload-fns as anon funcs instead of calling from a library of pre-build functions#2021-01-3121:05miroYou can do both, using a library fn is probably better/cleaner for production use#2021-01-3121:06mirowhile anon funcs are better for prototyping#2021-01-3121:06firstclassfuncok need to do more digging. Also how do you access REPL within the IDE?#2021-01-3121:07mirojust highlight what you need to execute and hit ctrl-enter#2021-01-3121:07miroobviously this can have side effects on the server side so should be used when you know what you are doing 😉#2021-01-3121:08miroand also auto-complete is ctrl-space#2021-01-3121:08firstclassfuncgot it.. super cool.. ❤️ this#2021-01-3121:08miroI probably should write it somewhere#2021-01-3121:11miroThanks! I am always super happy to hear from ppl using it because it is tremendously helpful to see what ppl use it for, what they like / what does not work etc., so feel free to let me know what you think after you've played with it for a bit - e.g. in here or on github discussions. Cheers!#2021-02-0113:58firstclassfuncHello @U5L1P2D9U Maybe you should setup a channel to discuss Titanaboa. I have noticed that http-client tasklet does not eval keys in properties e.g.
:basic-auth #titanoboa.exp/Expression{:value " [(:FWD_USER *properties*) (:API_TOKEN *properties*)] ", :type "clojure"},
#2021-02-0114:04miroHi, this was broken awhile ago, should be fixed now, I will double check#2021-02-0114:05miroAnd yep, good idea with the channel, feel free to set it up or i will do it later#2021-02-0114:06miroAlternatively I always wanted to try github discussions, so we could move the chat there#2021-02-0114:08miro@UMFRQDVU1 feel free to paste there the whole workflow edn will look at it in the evening#2021-01-2214:52oliyI've just released pedestal-api 0.3.5 pedestal-api is a batteries-included library for building APIs in pedestal with auto-generated OpenAPI/Swagger documentation https://github.com/oliyh/pedestal-api This release updates all the dependencies, most notably the swagger-ui#2021-01-2214:56ericdalloReleased *https://clojure-lsp.github.io/clojure-lsp/ *of `clojure-lsp` with a lot of changes/fixes 🎉 This release removes all `clojure-lsp` parsing knowledge replaced by `clj-kondo` analysis/findings output. For more info, check #lsp#2021-01-2216:02pezThis is huge. Super well done all you people doin' it!#2021-01-2216:58telekidDo you produce release notes? I’d love follow along.#2021-01-2419:36ericdalloWe don't have a CHANGELOG yet @UABU2MMNW I'm adding info on the release tag on Github for now, but soon I intend to crete a CHANGELOG 🙂#2021-01-2222:32hlship[ANN] com.walmartlabs/lacinia 0.38.0 and lacinia-pedestal 0.15.0 Lacinia is an open-source implementation of the GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Featured changes in 0.38.0: - Support for Apollo GraphQL Federation - New selection API to introspect the query, including type system and directives - Correct compliance with the GraphQL specification with regards to errors and non-nullability - Query variables may now be used inside input object and list literals lacinia-pedestal adds support for accessing GraphQL as an HTTP endpoint GitHub repo: https://github.com/walmartlabs/lacinia-pedestal Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/ Featured changes in 0.15.0: - Enables request tracing by default - Interceptors that add keys to the context now delete those keys on exit#2021-01-2317:32practicalli-johnPracticalli community tools user-wide configuration for Clojure CLI has been updated • monthly updates of library versions in aliases for community tools • promote calve to main aliases • depstar to version 2.x (version 1 aliases prepended with -classic on alias name • fix :alpha/hot-load commit sha (had been swiched to head commit by mistake) https://github.com/practicalli/clojure-deps-edn#2021-01-2322:27mikethompsonre-com - there have been a series of releases in December and January, including: • more consistent treatment of disabled? in all components, for UI that has to switch to a readonly mode • added two "multi-select" widgets for different scenarios • added two table components (Alpha ststus) • it is now easier to style deep inside of components via "parts" • added various PRs • closed various issues https://github.com/day8/re-com/blob/master/CHANGELOG.md Demo app: https://re-com.day8.com.au/#/tag-dropdown#2021-01-2400:19tony.kayGuardrails 1.1.3 is on Clojars. This release fixes a bug in async mode where errors were not being reported for Clojure. Clojurescript was not affected. https://github.com/fulcrologic/guardrails#2021-01-2420:59vlaaadreveal New version of #reveal — https://vlaaad.github.io/reveal/ `1.3.193` — is out! For this major release I focused on providing a way to interact with Reveal window by submitting commands, allowing to easily build better IDE integration. You can learn more in the new readme section: https://vlaaad.github.io/reveal/#interacting-with-reveal-from-code Here is a little demo using Cursive:#2021-01-2421:08borkdudeReleased babashka 0.2.8 with additional built-in libraries: - core.match (much requested) - clojure.test.check (prep for including spec once it comes out of alpha) - hiccup (who doesn't use it?) https://github.com/babashka/babashka/blob/master/CHANGELOG.md#v028 Hop by in #babashka for questions and complaints ;)#2021-01-2421:39pezWhere is babashka.sh? 😃#2021-01-2421:40borkdude@U0ETXRFEW this is called babashka.process#2021-01-2422:00pezYeah, babashka.process is wonderful. I confused things and meant to lob for babashka.fs.#2021-01-2422:01borkdude@U0ETXRFEW That lib is not done yet. I'm stuck on the glob function :/ If you want to help me, that'd be great.#2021-01-2422:02borkdudeIt is high on my list though#2021-01-2422:04pezglob happens to be what I most want to have. 😃 I would love to help, even if I doubt I know how to. How are you stuck?#2021-01-2422:07borkdude@U0ETXRFEW Check issue 4 and 5.#2021-01-2422:07pezI just have to share how I do it in lack of babashka.fs.
(defn glob [pattern]
  (-> (shell/sh "bash" "-c" (str "ls " pattern))
      :out
      (#(when-not (= % "")
          (string/split % #"\n")))))
Actually works pretty well.
#2021-01-2422:08borkdudeso you are using the bash definition of glob. there are different defaults, recursive, not recursive#2021-01-2422:08borkdudesee https://github.com/babashka/fs/issues/5#2021-01-2422:11pezAre there difficulties in implementing the recursive version or is it more a matter of deciding which one to use?#2021-01-2422:11borkdudedeciding which one to use as the default, also, include hidden dirs by default or not?#2021-01-2422:13borkdudeI have a work in progress version in the glob branch which can be run only from clojure currently#2021-01-2422:13borkdudebecause I'm using java.nio.file.DirectoryStream which is not yet available in bb#2021-01-2422:14borkdudebut for testing, I would use that one#2021-01-2422:16pezCould it be an option? I think non-recursive makes a good default, if I can opt in on the recursion.#2021-01-2422:18borkdude@U0ETXRFEW That's what I've done in the glob branch:
$ clj -A:babashka.fs/dev
Clojure 1.10.2-alpha2
user=>  (require '[babashka.fs :as fs])
nil
user=> (fs/glob "." "**/*.md")
[]
user=> (fs/glob "." "**/*.md" {:recursive true})
[#object[sun.nio.fs.UnixPath 0xdab48d3 "/Users/borkdude/Dropbox/dev/clojure/babashka/sci/CHANGELOG.md"]
#2021-01-2422:18borkdudebut it might be a bit silly when searching for "**/*.md" to not have it recursive, since it won't match anything#2021-01-2422:29pezYeah. So that explains why some ignore files do not seem to work for me.#2021-01-2514:56Alex Miller (Clojure team)This is the last week for https://www.surveymonkey.com/r/clojure2021 - please fill it out if you use Clojure! Takes about 5 minutes.#2021-01-2520:08Michaël SalihiThx for the reminder...it's done!#2021-01-2516:00dmillettReleased clash 1.5.2 with a couple of new features: • Integrated CSV parsing & automatic structuring with (transform-lines) • Added type indicators for maps, vectors to clash.shape https://github.com/dmillett/clash#parsing-csvs#2021-01-2518:28Jacob O'BryantHallway: find relevant discussions for a given URL. Supports HN/Reddit/Twitter so far, and PRs welcome. https://github.com/jacobobryant/hallway#2021-01-2602:10eccentric JOoh could this be used to display like comments on a static page?#2021-01-2614:26Jacob O'Bryantnot as-is, but with a few patches, totally. we'd just need some more external api calls to fetch the actual comments for the discussions that are already listed.#2021-01-2619:38Alex Miller (Clojure team)Clojure 1.10.2 is now available! https://clojure.org/news/2021/01/26/clojure1-10-2#2021-01-2619:38Alex Miller (Clojure team)Changelog: https://github.com/clojure/clojure/blob/master/changes.md#changes-to-clojure-in-version-1102#2021-01-2619:41seancorfield#2021-01-2619:48Alex Miller (Clojure team)no changes since rc3#2021-01-2620:42Alex Miller (Clojure team)New Clojure CLI 1.10.2.774 is now available. No big changes, just defaults to 1.10.2 if no Clojure version is specified. https://clojure.org/releases/tools#v1.10.2.774#2021-01-2818:17slipsethttps://github.com/clj-commons/clj-yaml is out in version 0.7.106 • deploy to clojars is now automagic, and artifacts are signed • Thanks to @skuro we now have support for namespaced keys#2021-01-2916:33Alex Miller (Clojure team)Ok, for real I am going to stop bothering you soon, but please fill out the State of Clojure 2021 survey TODAY! https://www.surveymonkey.com/r/clojure2021 Thanks in advance...#2021-01-2916:35borkdudeCan we win something?#2021-01-2916:36Alex Miller (Clojure team)yep, one lucky winner will get a jira ticket of their choice :)#2021-01-2916:36Alex Miller (Clojure team)you won't get a fix, just a jira :)#2021-01-2916:37borkdudebananadance#2021-01-2917:16pezStoked to see the results!#2021-01-2917:19Alex Miller (Clojure team)but you will all get my undying love and devotion 😜#2021-01-2917:35Aleksandershould people that were programming in Clojure for some time in the past, but not at the moment also fill it out?#2021-01-2917:39Alex Miller (Clojure team)sure!#2021-01-2919:28Alex Miller (Clojure team)@U01AVNG2XNF replying to your in-channel comment... I use similar Firefox version on Mac (but 10.15.7) with an ad blocker and it works fine for me. not really much I can do about it unfortunately.#2021-01-2919:33seancorfield@U01AVNG2XNF’s comment (since I'm going to delete it from the main channel) was: I'm probably way too late to the party here, but that survey doesn't render in Firefox (84.0.2) at all for me on MacOS 11.1, even with my ad blocker turned off — works fine on Safari. 😕#2021-01-2920:41Steven Deobald@U064X3EF3 Strange. But if I'm the only person who's noticed this it's probably a non-issue. 🙂 Sorry for the noise.#2021-01-2920:18seancorfieldhttps://github.com/seancorfield/depstar/releases/tag/v2.0.171 -- seancorfield/depstar {:mvn/version "2.0.171"} is available: the main change in this release is that pom.xml is no longer required when building an uberjar (much requested recently!). Follow-up in #depstar#2021-01-3009:25timo#2021-01-3013:05slipsethttps://github.com/clj-commons/spyscope is released at 0.1.48 Updated to deps to latest, and automagic deploy to clojars There is some trickery wrt fipp and jdk > 8 which makes this lib a bit cumbersome to work with. https://github.com/brandonbloom/fipp/issues/72 If anyone feels like giving a bit of love/maintainership to spyscope, please feel free to contact/open issues/PRs#2021-01-3022:01nnicholshttps://github.com/nnichols/clojure-dependency-update-action is now available at v3 This update adds a batch mode to create a single PR for all updated dependencies. Each dependency is updated on its own commit (You can always squash them), and the PR should automatically come with an itemized list of version changes.#2021-02-0113:31athosI’ve recently released two libraries: https://github.com/athos/power-dot and https://github.com/athos/type-infer. • power-dot: A Clojure library that provides enhanced Java interop that allows you to treat Clojure functions as if they were Java lambdas • type-infer: A development utility to inspect static types inferred by the Clojure complier Give it a try!#2021-02-0204:47vemvenjoyed checking out both, particularly type-infer :) wrt power-dot, merely as a musing: I don't find the reify examples so bad - they're concise enough and transparently reflection-free. The main problem is probably discovery, e.g. it's hard/tedious to know in advance that .. (IntStream/range ...) can be auto-completed to filter, and that similarly, filter can be auto-completed to IntPredicate. It seems plausible to me to conceive this as a problem that could be solved in https://github.com/alexander-yakushev/compliment (the lib that powers the auto-completion of CIDER et al). Basically teaching it to understand functional interfaces + to emit completions that are more substantial than a single symbol (e.g. emit a whole (reify ...) as a completion)#2021-02-0209:04athosThank you for trying them out! I’m glad to hear that 😄 TBH I think method auto-completion is “too dynamic” a problem to solve with power-dot. As I mentioned a bit in the README, type-infer does type inference with the help of the Clojure compiler and due to that limitation, the target expression of type inference must be evaluated eventually. In this respect, infer is almost the same as eval:
(infer (println "hello"))
;; prints "hello"
;=> nil
If it’s acceptable to evaluate subexpressions, I think it’s much easier to simply call eval and check the runtime type of the value.
#2021-02-0121:12Mark WardleHi all. I’ve built a new clojure-based library and microservice for SNOMED CT : https://github.com/wardle/hermes. This is a terminology useful in health and care applications. It’s the first of a series of composable libraries to provide some foundational healthcare system services, and my first real clojure product. Clojure’s been amazing in supporting this - I struggled to implement the expression constraint language or more complex logic in the prior versions of my SNOMED tooling - built either in Go or Java. Thank you to those who’ve built the software and libraries I’ve built upon!#2021-02-0122:19val_waeselynckLooks interesting! Maybe this is evident to insiders of the field, but I'm curious what is meant by "inference" here.#2021-02-0206:38Mark WardleThanks. Basically because SNOMED is an ontology we can use the relationships (triples basically) to infer that, for example, you have a type of neurological disease if I know you have Parkinson’s disease. But it isn’t limited to diagnostics but lots of different domains including occupations, countries, procedures, drugs etc. See https://www.snomed.org/snomed-ct/five-step-briefing I use in an EPR. #2021-02-0208:32borkdude@U013CFKNP2R We're using similar technology in our stack at https://covid19.doctorevidence.com/. Very interested to see what you did.#2021-02-0208:47JorinLooks pretty nice! Some day we might have to integrate with SNOMED as well and then this will be an invaluable resource to either use directly as a service or at least as inspiration 🙂 Thanks for sharing!#2021-02-0209:18Mark WardleThanks both. @U04V15CAJ - DRE looks interesting! Would be lovely to compose clinician-facing tooling for clinical patient management WITH tooling for making sense of clinical literature. Both are trying to make sense of too much information and both complement each other.#2021-02-0211:49val_waeselynck@U013CFKNP2R thanks. For people like me, "deductive inference" or "logical inference" would remove most of the ambiguity, as it would no longer be confusable with "statistical inference".#2021-02-0211:50Mark WardleHa! Ontological inference. But I do both statistical work and ontological work and have no difficulty swapping the meaning (pun intended) 😉 "Inference: the process of inferring something."#2021-02-0204:22seancorfieldFor anyone still using org.clojure/java.jdbc, I just released 0.7.12 to Maven Central. The only difference from 0.7.11 is that most of the protocols are now extensible via metadata making it easier to work with a wider variety of data types (just like in next.jdbc). Follow-up in #sql#2021-02-0218:40Yehonathan SharvitMy dear Clojure friends, Developing in Clojure over the last 9 year taught me so many powerful general insights about programming. I am writing a book called “Data-Oriented programming” in which I am attempting to share part of those insights with the global developer community. The https://www.manning.com/books/data-oriented-programming?utm_source=viebel&amp;utm_medium=affiliate&amp;utm_campaign=book_sharvit2_data_1_29_21&amp;a_aid=viebel&amp;a_bid=d5b546b7 is available in early stage at https://manning.com. Here is a 50% off discount code: mlsharvit2.#2021-02-0219:07caumondI recognize plantuml diagrams ! Good choice#2021-02-0220:19Yehonathan SharvitHehe! Being able to have “source code” for diagrams motivates me to create lots of diagrams. I don’t have to bother my mind with the look and feel of the diagram. I focus on the “logic” of the diagram. Also, I have the ability to refactor diagrams across the whole project (e.g. fixing a typo or changing the case of a term…)#2021-02-0221:26deep-symmetryI love that you posted this, because earlier today I had posted a link to the book on our company’s internal Clojure Slack channel saying “This looks like a book about how to program as if you were using Clojure”! 😀#2021-02-0221:39caumondA use case I love also, being able to generate diagrams.#2021-02-0303:39eggsyntaxEnjoyed skimming it, especially this:#2021-02-0307:54Yehonathan SharvitFunny!#2021-02-0511:11David VujicPurchased the book and read the available chapters yesterday, I like it! :thumbsup: #2021-02-0616:12Yehonathan SharvitI am so happy. Spread the word among your friends!#2021-02-0616:13Yehonathan Sharvit@U018VMC8T0W Would you be interested in contributing to a Wikipedia article about Data-oriented programming?#2021-02-0617:07David VujicSounds like fun and a good way to learn more about the subject 😄#2021-02-0617:52Yehonathan SharvitDefinitely. I have added you to #data-oriented-programming. There is a link there to the draft of the Wikipedia article and how you could contribute.#2021-02-0312:37pezA new version of Calva is out. Read here about what is new since we last announced a release: https://clojureverse.org/t/calva-coexistence-with-other-clojure-repl-extensions-improved/7110 Also feel super welcome to #calva to discuss its development and get help with using it.#2021-02-0318:36chrisnI am very proud to announce https://clojars.org/cnuernber/dtype-next. This major re-write of our Clojure high performance computing library targeting higher performance, wider platform support, and reduced code footprint. https://github.com/cnuernber/dtype-next/ is a Clojure library that adds a coherent C/java integration, lazy functional, and high performance numerics, N-dimensional array programming, index space algorithms and high performance reductions. It works on JDK-8 through 14 and has partial JDK-16 and Graal Native support.#2021-02-0509:33miroHappy to announce that https://github.com/mikub/titanoboa is now being open sourced. There is a new https://github.com/mikub/titanoboa/releases/tag/1.0.0-alfa.1 you can try. Read more at our https://github.com/mikub/titanoboa/wiki/Clustering . This should make it easy for you to run tens or even hundreds of Titanoboa servers in one cluster 🎉#2021-02-0509:54caumondHi, I am very interested in your project, as I am in the process of designing something close to that (open, graphically sketchable, maybe modifiable, to orchestrate some treatements, manage their errors, decide what are the next steps, ...). I have a look and tell you !!#2021-02-0510:24caumondSmall improvement: it seems the docker image does not have the latest tag. So, in the installation guide docker run -d -p 3000:3000 --name titanoboa titanoboa/titanoboa should be docker run -d -p 3000:3000 --name titanoboa titanoboa/titanoboa:0.9.0 . Or add the latest tag on docker hub#2021-02-0510:25caumondThat said, it work on 3 minutes on my pc !#2021-02-0510:36miroThanks @U018QDQGZ9Q! I will fix that. I also still have to upload the latest Docker images (1.0.0-alfa.1 and 0.9.1), but they should be available soon. Good to hear that it is working 🙂#2021-02-0510:31g7sI've just open sourced skidder a Drag and Drop ClojureScript library https://github.com/g7s/skidder#2021-02-0523:10uochanJust released antq ver 0.11.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Added support to display diff URLs for outdated dependencies!#2021-02-0523:29seancorfield
The tag for current version is not found: 
Execution error (NullPointerException) at antq.util.maven/get-scm-url (maven.clj:97).
Cannot invoke "org.apache.maven.model.Scm.getUrl()" because "scm" is null
#2021-02-0523:30seancorfield0.10.3 works fine across our whole codebase (~110K lines of Clojure).#2021-02-0523:31seancorfieldShould I just create an issue on GitHub for this @UBL24PLE6?#2021-02-0523:32uochanYes, please. Thanks for your reporting!#2021-02-0523:48seancorfieldIf I get time, I'll send a PR. It looks relatively easy to fix.#2021-02-0600:07uochanI've released v0.11.1 for now.#2021-02-0600:26seancorfieldOh, wow, that was fast -- thanks! Testing now...#2021-02-0600:28seancorfieldConfirmed it works! Awesome!#2021-02-0600:36uochanThanks!!#2021-02-0616:39tony.kayFulcro 3.4.16 and Fulcro Inspect 3.0.4 were just released. This version fixes the Inspect Tool’s “Time Travel” feature, which got broken by various optimizations that made the history tracking much faster in development. The Inspect version will auto-update from Chrome store, but if you want to download it and manually install it, or you want to just use the websocket-based electron app you can find those in the Releases section of the Fulcro Inspect repository. NOTE: The live DOM preview of the database time travel requires the update to Fulcro 3.4.16. https://github.com/fulcrologic/fulcro-inspect/releases#2021-02-0705:30tony.kayI’m starting a new Playlist on YouTube titles “Grokking Fulcro”. This is a dual-purpose video series: • Help existing Fulcro users understand the low-level details. • Show common patterns. Fulcro does things differently than people expect, so knowing how to “think” about common problems requires some shifts that people often struggle with. • Expose people less familiar with Clojure(script) to some of the superpowers you gain by using it. First video just dropped. Here’s the playlist: https://www.youtube.com/watch?v=3dZK5seIaVI&amp;list=PLVi9lDx-4C_TBRiHfjnjXaK2J3BIUDPnf&amp;index=1&amp;ab_channel=TonyKay#2021-02-0706:25bedersgreat little intro to the magic behind react!#2021-02-0720:17Danny Almeidayou are a superstar 👏:skin-tone-3:#2021-02-0723:44genekimCan’t wait to watch it! Thanks, @U0CKQ19AQ!!#2021-02-0712:46ericdalloThe latest release of clojure-lsp clojure-lsp adds a new code action that suggest an alias to be required! Also, recently we provided native binaries compiled with GraalVM graal-vm for Linux, MacOS and Windows 🎉 For more information, check #lsp#2021-02-0713:33borkdudeAnnouncing babashka.fs: https://github.com/babashka/fs A file system utility based on java.nio with inspiration from http://clojure.java.io, clj-commons/fs and https://github.com/nate/fs. This library can be used on the JVM and comes bundled with babashka 0.2.9 (just released). Many thanks to the kind people here on slack for reviewing the initial alpha versions of this library.#2021-02-0804:17Alex Miller (Clojure team)Guaranteed Rate commercial during the Super Bowl had some Clojure on screen ... https://youtu.be/Nf0QvCq3quk?t=38#2021-02-0804:18Alex Miller (Clojure team)Not sure what editor that is?#2021-02-0804:21prertikLooks like vim(spacevim) to me.#2021-02-0804:29eccentric J#2021-02-0804:31andy.fingerhutCan anyone read it?#2021-02-0804:32eccentric JI can read parts of it 😅#2021-02-0804:46eccentric JIs Clojure famous now? 😎#2021-02-0805:10chuckleheadthis frame has a reasonably legible view of the left pane w/ create- and update-loan! functions, middle pane is some functions for rates, can't read anything on the right#2021-02-0805:52djblueThat's a lot of chrome tabs!#2021-02-0806:10chuckleheadI'll often have multiple instances with at least that many tab open and I think it makes my girlfriend physically ill when she happens to look over my shoulder#2021-02-0806:12chuckleheadon the other hand, the only thing on my desktop is my recycle bin and I'm suspicious of anyone who leaves documents and folders all over theirs.#2021-02-0806:20eccentric JOoh I just learned about the , and . keys on youtube to go back and forward a single frame. You can definitely get clearer screenshots that way!#2021-02-0806:42slipset“How did an underdog, always counted out, take down the biggest name?” I think Clojure was a reasonable choice of PL for this add. #2021-02-0806:20tony.kayGrokking Fulcro part 2 is now available: https://youtu.be/102nHLzIbE4#2021-02-0810:16eccentric JEver want to use Clojure like it was PHP on cheap servers? Now you can by combining Babashka with cgi-scripts on shared hosts! Learn more about the process at https://eccentric-j.com/blog/clojure-like-its-php.html. See an example at https://cgi.eccentric-j.com/metal.clj. View the source, then discover some helpful scripts, docker-files, and hints at https://github.com/eccentric-j/clj-cgi-example.#2021-02-0810:17eccentric JMajor thanks to @borkdude and @U0K064KQV, would not have gotten to this point without your help!#2021-02-0810:38Tomas BrejlaDid you perform any benchmarks of such solution? I'd be a bit afraid of the fact that you need to spawn new bb instance for every single request (right?). And bbbinary is 70MB..#2021-02-0810:41Tomas BrejlaI mean I like the fact that it's possible to execute bb this way :thumbsup: , I'd just hope that people will not start trying to create full-blown webapps this way 😄#2021-02-0810:42borkdude@U01LFP3LA6P I'm not sure if the binary size matter for memory usage. E.g. bb -e '(+ 1 2 3)' give me:
max memory:                17516 MB
You can even set -Xmx as the first command line arg to bb if you are worried about this. For max performance CGI isn't the best solution. You will go to a proper HTTP server (babashka also has one btw) and probably run JVM Clojure. I think you should consider this an experimental approach for personal side projects / low traffic websites.
#2021-02-0810:47Tomas BrejlaYes, the memory usage will be probably lower than the actual size of the binary. But still, even ~17MB per request is quite a huge overhead (when compared to handling a request in a long-running http server)#2021-02-0810:47Tomas Brejlayeah, babashka's httpkit server might actually give quite decent performance#2021-02-0810:51Tomas Brejlastill, Eccentric J's solution might be a nice alternative for many personal side-projects, where you need to quickly hack together some http-accessible scripts backed by clojure code and you're not limited by performance. It's nice that you don't have to keep any additional server running -> don't have to monitor its status etc.#2021-02-0810:53jeroenvandijkNice @U8WFYMFRU! I’m curious if you know https://github.com/alekcz/pcp and how you would compare it. I’m guessing your approach fully exploits the features in babashka whereas PCP is based on Sci, but not as fully featured as Babashka. PCP might counter the memory issues @U01LFP3LA6P mentioned#2021-02-0810:56borkdudeFrom the blog post: > Github user alekcz (Alexander Oloo) has begun drafting PCP: A Clojure processor that runs a SCGI server that can act as a replacement for a long-running php-fpm process. This may not be best suited for a shared hosting service but would definitely be good for a VPS hosting service. I look forward to seeing it progress! Afaik PCP also needs a JVM to run.#2021-02-0810:57jeroenvandijkYeah good point. Different approach then. Nice to see these developments anyway#2021-02-0810:58eccentric JYes found it the other day and linked to PCP in my article as an alternative. This solution with bb works with SimpleCGI. Where the script runs cold. PCP is more like FastCGI where there is a continuous process that a request client communicates with like how php-fpm works. You cannot run PCP on shared hosts, you will need at least a VPS.#2021-02-0811:00jeroenvandijkThanks for the explanation! And thanks for exploring this use of Babashka!#2021-02-0811:03jeroenvandijkNext step is to convince the php hoster companies to make babashka available on their servers 🙂 (I forgot the name for these companies 🙈)#2021-02-0811:07eccentric J@U01LFP3LA6P I did not benchmark it but I doubt it would be reliable. Shared hosts are unpredictable, like a bathroom shared amongst many roommates 😂 While editing it I probably refreshed the page in the triple digits and it certainly wasn’t the fastest but it’s loading < 1 s for me which is sufficient given that I’m loading bb, Postgres pod, running a query, transforming css with gaka, and html with hiccup. I wouldn’t launch an enterprise, high-availability service with it but it seems very promising for putting together some MVPs.#2021-02-0811:08eccentric JThe setup I am using for now is also the least optimized, might be a bit more performant to uberscript the entire project and run it through that as a single bundle and use carve to trim it down.#2021-02-0811:09borkdudeAnd then when you want to optimize it even further you can GraalVM compile it without using bb, or just produce static HTML for pages that don't need user input (if you want to continue going the CGI route)#2021-02-0811:16Tomas Brejla> I did not benchmark it but I doubt it would be reliable. Shared hosts are unpredictable, Agreed. But one can still perform such benchmark on his local machine. Maybe someone will try it. It's not that important to do such benchmark. I was just curious, as I have no idea (nor a good estimate) of how poorly (or perhaps surprisingly well) this hacky-but-nice solution would scale. Maybe I'll try to benchmark this myself if I find some spare time.#2021-02-0816:49eccentric JThat would be great! I’d be interested in seeing how it’s done for the future. #2021-02-0816:50borkdudeI usually use multitime to test multiple invocations of a script#2021-02-0816:51borkdudee.g.:
$ multitime -n10 -s0 /usr/local/bin/bb tmp/meander.clj
===> multitime results
1: /usr/local/bin/bb tmp/meander.clj
            Mean        Std.Dev.    Min         Median      Max
real        0.152       0.004       0.148       0.151       0.159
user        0.108       0.002       0.106       0.107       0.110
sys         0.041       0.002       0.037       0.040       0.045
#2021-02-0816:52eccentric JI see so create a script that creates a request and waits for a response then run it with multitime?#2021-02-0816:52borkdudeI think you should just test the script itself preferably#2021-02-0816:53borkdudeand not include other tools, to discount their startup time overhead#2021-02-0816:55eccentric JGood point#2021-02-0816:55kschltzbtw, Just loved to see Igorrr referenced in front page#2021-02-0817:54val_waeselynck@U8WFYMFRU I love this stuff. I've been really bothered by the infrastructure footprint of keeping live Clojure runtimes online, and this approach looks very promising.#2021-02-0818:35Shantanu KumarCould this idea be extended to run serverless scripts using bb?#2021-02-0818:37borkdude@U066J7E2U You mean like AWS Lambda-ish?#2021-02-0818:38Shantanu KumarYes, @borkdude#2021-02-0818:41borkdude@U066J7E2U I've seen several mentions of babashka on AWS Lambda. I think it works. There's also a blog post about it here: https://www.jocas.lt/blog/post/babashka-aws-lambda/ @U0FT43GKV I think it's the first time I see this blog post. Here is a specific setting for AWS Lambda: https://github.com/babashka/babashka#package-babashka-script-as-a-aws-lambda#2021-02-0818:41borkdudeThe blog approach might need updating, maybe best to discuss in #babashka. People like @U0JEFEZH6 have mentioned that you can now do this more easily perhaps without "layers".#2021-02-0818:50eccentric J@UNAPH1QMN 💯 I underestimated how difficult it would be to make a meaningful database for this example that demonstrates the power without it becoming overcomplicated. Fortunately I was listening to my Igorrr playlist at the time.#2021-02-0818:54eccentric J@U06GS6P1N I’m glad to hear that! There are many small side projects I can just start busting out now instead of having to plan a whole stack, deploy system, and cloud platform research. It’s amazing how big of a difference removing those decisions make.
#2021-02-0906:31eccentric JAdded benchmarks to https://github.com/eccentric-j/clj-cgi-example#benchmarks#2021-02-0818:58Sam RitchieAnnouncing the 0.15.0 release of the #sicmutils computer algebra system for Clojure(script): https://github.com/sicmutils/sicmutils/ SICMUtils is a system built for interactive math and physics explorations in Clojure; it’s also got smoking fast numerical method implementations for when you do want to go fast. The latest release is fully compatible with #sci , and therefore easy to add to any environment (#nextjournal anyone?) that uses SCI for clj(s) evaluation. We’ve also upgraded the automatic differentiation implementation to handle higher order functions, and comparison and equality, so you can differentiate functions with internal conditional. Lots more in the release notes here: https://github.com/sicmutils/sicmutils/releases/tag/v0.15.0 Thanks to @mkvlr, @borkdude and @hcarvalhoaves for your help and contributions in the latest release. Please come say hi in #sicmutils if any of this sounds intriguing!#2021-02-0910:40slipsethttps://github.com/clj-commons/friend is released as clj-commons/friend version 0.3.193 This is a fork of Chas Emericks friend library. This is basically 0.2.3 but with a version bump of jbcypt to avoid a CVE. Please consider using https://github.com/funcool/buddy instead of friend, or as @borkdude put it: “friends don’t let friends use friend”#2021-02-1004:10jumarIs the main reason to prefer buddy that the library is no longer actively developed?#2021-02-1004:35slipsetYes#2021-02-1107:33Vincent CantinThis announcement is rather peculiar: “Hey, here is a cool library, but don’t use it” 😉 It still makes sense.#2021-02-0913:23blueberryNew release of Deep Diamond: 0.18.0-alpha High performance tensors and deep learning, in Clojure! https://github.com/uncomplicate/deep-diamond#2021-02-0914:31Ertugrul Cetinoverload-fn is a tiny Clojure library that makes possible function overloading on types. https://github.com/ertugrulcetin/overload-fn#2021-02-0915:04vemvIf the dispatch is limited to object, longs and doubles, I think one can reify a subset of these interfaces https://github.com/clojure/clojure/blob/140ed11e905de46331de705e955c50c0ef79095b/src/jvm/clojure/lang/IFn.java#L97-L454 (as few interfaces as needed, e.g. just two for two signatures) reify supports dispatch-by-type, while implementing said interfaces would give you a callable thing the result can plausibly perform a little better than a defprotocol/multimethod -based abstraction#2021-02-0915:58Ertugrul CetinI'll check this, thanks!#2021-02-0916:10vemv:) it could be a cool optimization. e.g. use these when possible but generally fall back to protocols/multimethods when not ...of course, very few apps will plausibly need such a thing#2021-02-0915:18Yehonathan SharvitWikipedia collaborators wanted! I am working on writing a Wikipedia article about Data-Oriented programming. If you are interested to collaborate, join #data-oriented-programming or send me a private message.#2021-02-0916:08kwrooijenHiccup-cli just arrived on MELPA! Convert HTML to Hiccup inside of Emacs with pretty printing (clipboard, kill-ring, directly in buffer). It does require you to build the GraalVM binary locally. I'll look into setting up CI/CD to build this automatically. https://github.com/kwrooijen/hiccup-cli#2021-02-0916:11borkdude@UKFSJSM38 Is this something that could be integrated in clojure-lsp? Convert selection to hiccup <-> html? ;P#2021-02-0916:25ericdalloYeah, it could be implemented if hiccup-cli has an API to clojure-lsp, also some kind of function to detect if the cursor is inside a valid hiccup or html code#2021-02-0916:25ericdallo@UG9U7TPDZ about the CI, check the clojure-lsp CI which compile with graalvm 😄 https://github.com/clojure-lsp/clojure-lsp/blob/master/.github/workflows/release.yml#L47-L260#2021-02-0916:31kwrooijenWill look into that, thanks 👍#2021-02-0916:36kwrooijenAre you using Github's CI/CD?#2021-02-0916:36ericdalloYes#2021-02-1121:42kwrooijenJust got it set up, thanks @UKFSJSM38! Your repo was very helpful#2021-02-1121:43ericdalloNice 😄#2021-02-1113:04val_waeselynckhttps://clojureverse.org/t/building-a-community-for-sustainability-oriented-clojure-work/7159 Follow-up on ClojureVerse, Reddit, or in #community-development (I suppose that's the right channel for this, and that it's OK to publish this here, as it's arguably a kind of project)#2021-02-1114:03oliyHi everyone, I've just released martian 0.1.15 Martian is an HTTP abstraction library for Clojure/script providing url construction, request/response coercion and validation and more via an extensible interceptor pattern based on Swagger/OpenAPI schemas or routes described as data https://github.com/oliyh/martian This release adds support for: • Development mode - a martian instance can now be a function or a var that resolves the martian instance, giving a better REPL workflow https://github.com/oliyh/martian/issues/101 • Inline object definitions https://github.com/oliyh/martian/issues/100 and required field arrays on objects https://github.com/oliyh/martian/issues/102 (thanks https://github.com/evilsneer for reporting) • An optional response validator which validates responses against the response schema This release improves: • Initialisation of martian.re-frame instances to avoid race conditions https://github.com/oliyh/martian/issues/95 • Documentation of martian.cljs-http initialisation#2021-02-1213:18timoAwesome project! Can I read a openapi.yaml as well? Or should I myself transform from yaml to json?#2021-02-1215:11oliyhi @U4GEXTNGZ thanks! no, it can't read yaml, so you either need to transform to json (hopefully 3rd party libs out there which will do it for you) or else directly into martian's internal clojure representation, but then you will probably duplicate quite a lot of the work that martian does for interpreting swagger.json#2021-02-1215:12oliythis only happens at bootstrap time so performance shouldn't really be an issue#2021-02-1215:12timoThanks @U076R6N1L#2021-02-1313:12borkdudeClj-kondo v2021.02.13 New: full support for core.match syntax! And keyword analysis (used by clojure-lsp)! Release notes: https://github.com/borkdude/clj-kondo/blob/master/CHANGELOG.md#v20210213 Follow up in #clj-kondo. Happy linting!#2021-02-1410:31borkdudetools-deps-native: an experiment to run tools-deps natively, which allows for faster dependency resolving without a JVM. https://github.com/borkdude/tools-deps-native-experiment It works, but there are some issues so this should be considered experimental. Please do try it out though. Pre-release binaries for macOS and linux: https://github.com/borkdude/tools-deps-native-experiment/releases/tag/0.0.1-SNAPSHOT#2021-02-1417:13ilevdLeiningen plugin to sort namespaces in :require block with project namespaces priority https://github.com/ilevd/ns-sort#2021-02-1915:06mafcocinco@U04V15CAJ would it make sense to make something like this a function of clj-kondo?#2021-02-1915:07borkdude@U6SN41SJC clj-kondo has a linter for this. but clj-kondo will not edit your code. #lsp will though, I recommend trying that out!#2021-02-1915:07mafcocincocool! I will check it out.#2021-02-1418:29phillIs it like Slamhound (https://github.com/technomancy/slamhound)? "Slamhound rips your ns form apart and reconstructs it. No Dutch surgeon required."#2021-02-1419:05Vincent CantinIn this channel, please keep the discussions inside Threads.#2021-02-1420:18pezBecause posts in the channel get posted here and there over the web. 😃#2021-02-1422:04ilevdProbably not, it just sorts namespaces with projects namespaces priority#2021-02-1509:43vemvIt's more like https://github.com/gfredericks/how-to-ns but with one distinct feature (priority) Btw you might be interested in separating the core feature from leiningen so it can be used from the repl. cljfmt, how-to-ns, etc, do this#2021-02-1420:32phronmophobicclirun: Run any function from the clojure cli https://github.com/phronmophobic/clirun
# Write to a file using clojure.core/split
$ clj -M:run clojure.core/spit '"foo.txt"' '[1 2 3]'
$ cat foo.txt
[1 2 3]

# prn the return value by
# adding -p as the first argument
$ clj -M:run -p clojure.core/+ 1 2 3 4
10

# pretty print the return value by
# adding -pp as the first value
$ clj -M:run -pp  clojure.core/macroexpand-1 '(time (+ 1 2 3))'
(clojure.core/let
 [start__6153__auto__
  (. java.lang.System (clojure.core/nanoTime))
  ret__6154__auto__
  (+ 1 2 3)]
 (clojure.core/prn
  (clojure.core/str
   "Elapsed time: "
   (clojure.core//
    (clojure.core/double
     (clojure.core/-
      (. java.lang.System (clojure.core/nanoTime))
      start__6153__auto__))
    1000000.0)
   " msecs"))
 ret__6154__auto__)
#2021-02-1512:09Yehonathan SharvitJohn Lennon a Data-Oriented programmer ? Imagine - same music, new lyrics. Performed by https://twitter.com/wilkerlucio https://www.youtube.com/watch?v=EDRRbuWuUbQ#2021-02-1515:13borkdude@U066U8JQJ Even Rich liked it. Life goal accomplished?#2021-02-1515:14wilkerluciototally 😁#2021-02-1515:21borkdudebtw, a bit off topic, can you recommend a video tool to add those call outs? I'm a n00b in this area but I'd like to know how to do this easily#2021-02-1515:22wilkerlucioI used Screenflow, but mostly because its the thing I use for screencasts in general, and it has some basic video editing capabilities#2021-02-1515:23borkdudethanks#2021-02-1515:23wilkerlucioI do recommend that as a general screencast recording/editing app, but if it was just for adding subtitles, there are probably better options#2021-02-1515:58Yehonathan SharvitIt feels awesome to have my lyrics liked by Rich Hickey! Thank you @borkdude for the tweet that triggered the like.#2021-02-1515:59Yehonathan SharvitIt feels awesome to have my lyrics liked by  Rich Hickey! Thank you @borkdude for the tweet that triggered the like.#2021-02-1516:32borkdude@U066U8JQJ Screenflow is such an easy tool. I had used version 5 years and years ago. Upgrading now costs me 79 dollars instead of the full price. I'll consider it.#2021-02-1516:53seancorfield@U0L91U7A8 Just a reminder: #announcements is intended for library announcements (per the channel topic) -- stuff like this better belongs in #news-and-articles#2021-02-1516:53borkdudeIt would be very convenient if Slack supported "move thread to ..."#2021-02-1517:01Yehonathan SharvitThank you for the reminder @U04V70XH6 . Acutally in the channel topic I see also a mention about Projects. Maybe we could consider this song as a “project”?#2021-02-1517:04seancorfieldYeah, I'm not going to say "delete that and post it elsewhere" but I wouldn't want to encourage others to post videos and blog posts here 🙂#2021-02-1517:06borkdudeBtw, there is also a #music channel :)#2021-02-1517:56Yehonathan SharvitThank you @borkdude and @U04V70XH6#2021-02-1518:24jjttjjNow do "Mother" but "Java" 😛#2021-02-1519:31Yehonathan Sharvitwhat do you mean @U064UGEUQ?#2021-02-1519:32seancorfieldPink Floyd's "Mother" from "The Wall" I suspect...#2021-02-1519:32borkdudeOr a song by John Lennon? I am unfamiliar with that song, but since Imagine is by Lennon too...#2021-02-1519:43jjttjjYeah sorry was Lennon's "Mother" which got stuck in my head after watching the Imagine vid for some reason#2021-02-1519:44jjttjjBut on further reflection is maybe a little dark to parody idk#2021-02-1519:45seancorfieldPink Floyd's Mother^H^H^H^H^H^HJava:
Hush now, baby, baby, don't you cry
Java's gonna make all of your nightmares come true
Java's gonna put all of her fears into you
Java's gonna keep you right here, under her wing
She won't let you fly, but she might let you sing
Java's gonna keep baby cosy and warm
(perhaps even more dark than Lennon's song? 🙂 )
#2021-02-1519:46borkdudeOne man's Java is another man's Clojure#2021-02-1522:32miro@U04V70XH6 and that brings us to: We don't need no object mutation...#2021-02-1609:05olyis this the new way to promote programming languages remixing old songs 🙂#2021-02-1612:21Yehonathan SharvitI hope so!#2021-02-1515:59Yehonathan SharvitIt feels awesome to have my lyrics liked by  Rich Hickey! Thank you @borkdude for the tweet that triggered the like.#2021-02-1614:35katoxPGMig 0.6.0 is out! What's new: • More complete support for next.jdbc • Improved json and jsonb support by including PGObject jdbc extension • Updated to GraalVM 21.0.2. • Updated Clojure and dependencies • Docker image is based on the new graalvm/graalvm-ce base Release notes: https://github.com/leafclick/pgmig/blob/master/CHANGELOG.md Since this release you can even grab pre-built binaries for Linux/Mac/Windows here: https://github.com/leafclick/pgmig/releases/tag/v0.6.0 Docker images available at Dockerhub: https://hub.docker.com/r/leafclick/pgmig/tags?page=1&amp;ordering=last_updated Special thanks to @borkdude for SCI! Kamil#2021-02-1615:33Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.10.3-rc1 is now available • Reverted https://clojure.atlassian.net/browse/CLJ-2564 (case error message change from 1.10.2) - this change introduced a new var invoked from the code emitted by the case macro. This has compatibility issues in the case of aot compiling on 1.10.2, then using that compiled code with prior Clojure runtimes (where the var will not exist). Reverting this is the reason we have reopened Clojure 1.10.x. All changes from prior releases back to 1.8 were audited for this kind of issue, none were found. • https://clojure.atlassian.net/browse/CLJ-2453 Allow reader conditionals in prepl - thanks to Oliver Caldwell for the patch We do not expect any other changes in 1.10.3. Any help vetting this release would be appreciated prior to 1.10.3 release.#2021-02-1615:34Alex Miller (Clojure team)I hit the button slightly too soon here, release is actually not yet on maven central but it's on the way#2021-02-1615:41Alex Miller (Clojure team)ok, now available#2021-02-1617:03seancorfieldKicking off a full test suite run here with 1.10.3-rc1 but I would be shocked if it changes anything for us 🙂#2021-02-1617:57Alex Miller (Clojure team)yeah, probably actually more useful to check for anything unexpected with prepl based tooling (like REBL)#2021-02-1618:18seancorfieldI'm not using anything with a prepl right now, just the plain socket repl. I have it on my todo list to investigate Reveal's prepl chaining feature (but until I can persuade Chlorine/Clover to connect to a prepl that's pretty much on hold). I'll follow up in #clojure-dev with a question about that though...#2021-02-1712:13mpenethttps://github.com/exoscale/coax 1.0.0-alpha12 is out It's a small bugfix release (double coercion in a particular case with s/merge forms)#2021-02-1821:29mogenslundScreencast of my setup in the newest version of https://github.com/mogenslund/liquid https://www.youtube.com/watch?v=-MC0P4rj3e8#2021-02-1910:13henryw374my new starter project for creating a todo list app with re-frame and firebase: https://widdindustries.com/clojurescript-firebase-simple/. feedback welcome 🙂#2021-02-1910:44vlaaadI think this belongs to #news-and-articles — this channel is for project/library announcements only#2021-02-1910:47henryw374ok thanks#2021-02-1910:49henryw374I guess it does announce a starter project for cljs+firebase but point taken#2021-02-1917:29Steven KatzIs the “todo app” the “hello world” of the 21st century?#2021-02-2109:05henryw374😉 in the old days you felt like you'd really achieved something when you got to hello world with things like public static void main.. . clj -e '(println "Hello, world")' is just boring#2021-02-2717:39valsenYour code and blog post has been a huge help for me in setting up firebase auth for my own project, so thank you so much! However, I’m borrowing aspects from yours as well as from the source code of the deg/re-frame-firebase library, and am having trouble with compiling using default compiler optimizations :advanced. It apparently removes too much of the js code so that I get messages like Cannot read property 'getIdToken' of null because firebase doesn’t initialize properly. Works fine fith :simple optimizations, and I’ve tried adding ^js hints in the same places as your code does, which helped with a few of the errors but not all. Any suggestions what I could try?#2021-02-2718:13valsenMore specifically, it actually seems to initialize firebase, but fails to initialize the google sign-in constructor. firebase.auth.Xx is not a constructor#2021-02-2718:38valsenFollowing the directions at https://shadow-cljs.github.io/docs/UsersGuide.html#externs I just tried creating an externs/app.txt file and added a single line with the word GoogleAuthProvider and that seems to have done the trick! Now that constructor keeps its name instead of being renamed to Xx. I still don’t know why that specific name couldn’t be auto-inferred, but the solution/workaround is so simple that I can live with it:)#2021-02-2806:57henryw374Glad you got it sorted. As I have it in my project, that line is (`js/firebase.auth.GoogleAuthProvider.)` , so has no hint. I imagine in that case bc the compiler sees it refers to a global object it is left as is.#2021-02-1920:40Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.2.790 is now available • Add -version and --version options (same as java) • https://clojure.atlassian.net/browse/TDEPS-56 - Fix main-opts and jvm-opts word splitting on spaces (goodbye Corfield comma!) • https://clojure.atlassian.net/browse/TDEPS-125 - Use JAVA_CMD if set (thanks Gregor Middell!) • Add warning if :paths or :extra-paths refers to a directory outside the project root (in the future will become an error)#2021-02-1921:46phronmophobicAre you tired of web browsers pushing you around? Dictating your workflow? Requiring your tools to run in the browser rather than the other way around? Take control with https://github.com/phronmophobic/clj-cef, Clojure bindings for the Chromium Embedded Framework. * Embed an HTML5-compliant Web browser control in an existing native application. * Create a light-weight native “shell” application that hosts a user interface developed primarily using Web technologies. * Render Web content “off-screen” in applications that have their own custom drawing frameworks. * Act as a host for automated testing of existing Web properties and applications. All from the comfort of your local repl. Act now, and get anhttps://github.com/phronmophobic/clj-cef/tree/main/examples/htmltoimage absolutely free! https://github.com/phronmophobic/clj-cef#2021-02-1921:47phronmophobicApache2 License terms and conditions may apply. Mac OSX only. Incorrect usage may crash your jvm.#2021-02-2102:26seancorfieldseancorfield/depstar {:mvn/version "2.0.188"} is available on Clojars -- https://github.com/seancorfield/depstar -- :compile-ns now allows regex to match namespaces (thank you, @iagwanderson), :jvm-opts lets you pass JVM options to the compile process (e.g., for direct linking), :compile-fn let's you override the compile step if you need something custom (such as when building cljfx apps), ignores .DS_Store files, treats JAR files as ZIP files which should be more robust in the face of strangely constructed JAR files. 2.0.188 fixes a bug with :compile-ns :all introduced in 2.0.187#2021-02-2102:50eggsyntaxI hadn't seen the logo until just now, that's really funny 😂#2021-02-2104:17seancorfieldI'm not sure who is responsible for that at Health Finch long before I took over the library. Maybe Danielle Kefford? She committed both that logo and an earlier logo...#2021-02-2110:36bartukaNice, thanks @U04V70XH6#2021-02-2214:07ghadiYup it was made by @U04V52NKN#2021-02-2218:26Sam RitchieAnnouncing v0.16.0 of #sicmutils, the extensible Clojure(script) computer algebra system with excellent support for all of your advanced classical mechanics and differential-geometric needs. (Geometric algebra support coming soon!) Come say hi in #sicmutils. This release added new functions and generics like floor, ceiling, integer-part and fractional-part that render well to TeX and work in the symbolic environment (thanks @darrickw!) Many other improvements are coming together to make this library smoking fast at numerical computation and expressive in interactive environments. • release notes here: https://github.com/sicmutils/sicmutils/releases/tag/v0.16.0 • fresh cljdoc build: https://cljdoc.org/d/sicmutils/sicmutils/0.16.0/doc/introduction • clojars: https://clojars.org/sicmutils/sicmutils If you’re interested in this sort of thing, we’re also running a study group for Sussman’s “Structure and Interpretation of Classical Mechanics” starting this wednesday: https://clojureverse.org/t/scicloj-study-group-sicmutils/7118#2021-02-2218:29Sam Ritchiethis is an example (a very dense example, more friendly examples coming soon!) of the sort of symbolic investigation that #sicmutils allows into classical mechanics phenomena: https://nextjournal.com/samritchie/sicm-ch1-ex1-21#2021-02-2218:29Sam RitchieRunning live in the browser, no less!#2021-02-2219:18seancorfieldhoneysql "1.0.461" -- this includes an important security bug fix for a potential SQL injection vulnerability so I would recommend anyone using 1.0.444 (or earlier) upgrade to this latest version https://clojars.org/honeysql/versions/1.0.461 (note: this vulnerability did not affect the 2.0.x version currently in alpha testing!) -- all follow-up in #honeysql#2021-02-2221:12nijsselsAnnouncing an experimental rule engine with the working title Implify. It's a rule engine, where, using a DSL, rules expressed as predicate-groups result in an inferred typed data structure that can be evaluated within the web-app or as an API using JSON as input. Written fully in Clojure(Script) it leans heavily on the dynamic and lispy nature of Clojure. It is closed source however, but can be experimented with in a web application available at:  https://www.implify.eu Rudimentary docs and a pretty functional "playground" available at that location.#2021-02-2221:51borkdude@U2HDPM5FH If you are Dutch, which it sounds like, you might be interested in joining #clojure-nl. If you want to do a presentation about this at the Dutch Clojure meetup, could be nice maybe#2021-02-2221:56borkdudeAh you are already part of that channel :)#2021-02-2304:29kimimSo Michiel, you are Dutch?#2021-02-2307:45nijssels@U04V15CAJ Yeah, I'm indeed Dutch. Never been to the meetup, although I keep up with the sessions and subjects. About giving a presentation: perhaps after COVID-19 and all the lockdowns.#2021-02-2308:00borkdudeThe meetup is online now. And yes @U011J2CQT0F , I’m Dutch #2021-02-2306:49tony.kayI continue to add episodes of Grokking Fulcro on YouTube. I’m up to part 5. These videos are more oriented to the nuts and bolts of “how it works”, which I personally always appreciate knowing when I’m working with tools. If you’re new to Fulcro be sure to check out other resources that are more aimed to beginners, such as the Developer’s Guide and tutorial videos. The playlist for the new (nuts and bolts) series is https://youtube.com/playlist?list=PLVi9lDx-4C_TBRiHfjnjXaK2J3BIUDPnf#2021-02-2316:59Vincent Cantin@U0CKQ19AQ This channel is for library and project announcements. The video and articles may go to #news-and-articles instead.#2021-02-2318:02tony.kayAh, I did not realize there was a separate channel for that#2021-02-2308:51mikethompsonre-com v2.13.0 A component library for Reagent Headline: 1. Substantially improved debugging features https://re-com.day8.com.au/#/debug 2. Continued evolution of the two new table components. https://re-com.day8.com.au/#/v-table Full changelog: https://github.com/day8/re-com/blob/master/CHANGELOG.md#2130-2012-02-23 Next step: easier component skinning#2021-02-2309:00p-himikAwesome! Re. :require-macros and at - AFAIK, using :require-macros is pretty much outdated by now unless you're the author of that macros NS: https://code.thheller.com/blog/shadow-cljs/2019/10/12/clojurescript-macros.html In short, it's possible to let your users just use (:require [re-com.core :refer [at h-box v-box ...]]).#2021-02-2309:02mikethompsonThanks, we'll have a look#2021-02-2321:53blak3mill3rA very fine library, I look forward to checking out the new debug features#2021-02-2412:12mikethompson@U2FRKM4TW fixed, thanks#2021-02-2309:36emil0rez-wire 0.4.0 has been released. More updates to form. Documentation can be found here: https://emil0r.github.io/ez-wire-docs/#2021-02-2314:21Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.2.796 is now available • Fix incompatiblity with Cursive in 1.10.2.790 (also fixed in latest Cursive) - apologies on this one • Fix clj -X:deps git-resolve-tags to update the sha to match the tag if both are provided • Perf improvements for git or local deps using pom.xml#2021-02-2317:42Jakub Holý (HolyJak)awesome, thanks!#2021-02-2403:20lambduhhhEver heard of [[networked thought]] or [[zettlekasten]]? Super fascinating and effective ways to keep track of your brilliant ideas! :) Check out our awesome tool for organizing and easily referencing all your most useful thinker thunks. The ones that flutter by, escaping our brain right when we most need them. Locally hosted, open source desktop app built in .cljs, reagent, reframe and datascript. The Gates of Athens are open! Free desktop available to everyone, with additional tiers through OpenCollective. Try the web demo (no changes saved) at https://athensresearch.github.io/athens Desktop download links: - Mac: https://tinyurl.com/athens-mac - Windows: https://tinyurl.com/athens-windows - Linux: https://tinyurl.com/athens-linux#2021-02-2403:24seancorfieldThis is the open source "competitor" to Roam?#2021-02-2403:28jeff tangOne way to put it @U04V70XH6 #2021-02-2403:41Steven DeobaldI'm curious what warrants the scare quotes.#2021-02-2403:46seancorfieldBecause I don't know enough about either project to know whether they are truly competitors or not.#2021-02-2406:03Steven LombardiBesides Roam and Athens, are there any other similar solutions out there?#2021-02-2406:19Steven LombardiReading up on this stuff, I'm reminded of Notion. https://www.notion.so/product#2021-02-2406:19Steven LombardiNot quite the same problem space but there's definitely overlap.#2021-02-2406:35Steven LombardiA few other notables for discussion: • https://www.remnote.io/https://logseq.com/https://obsidian.md/https://github.com/foambubble/foamhttps://dendron.so/#2021-02-2407:55ordnungswidrigYou can also zettelkasen with org-mode https://blog.jethro.dev/posts/zettelkasten_with_org/#2021-02-2409:24emil0rDoes Athens support exports?#2021-02-2409:31Aleksanderthere is also https://twitter.com/codexeditor#2021-02-2409:31Aleksanderhttps://www.patreon.com/codexeditor#2021-02-2409:33Aleksanderre Athens exports: you can have a db backup, so I guess that counts as export#2021-02-2409:55dharriganI think athenresearch is pretty nice and lovely! A good showcase for another thing possible with clojurescript! well done @UMA337M3P!#2021-02-2410:22Jakub Holý (HolyJak)Where do I find some intro docs for Athenresearch? E.g. to learn what ((block references)) is? Is there any support for formatting (e.g. markdown)? thanks!#2021-02-2410:39Jakub Holý (HolyJak)Ok, found the Welcome page in the app 🙂#2021-02-2415:56ChaseAthens was recently accepted into Y-Combinator too. It'll be neat to see how they approach open source with commercial success which is a big topic in the zeitgeist#2021-02-2417:10jeff tanglooking to make seamless interop between datascript<>markdown. currently just datascript 🙂 @U0545PBND @UA2R84M28#2021-02-2417:12jeff tangsupport a subset of markdown right now @U0522TWDA. it's likely we go for full markdown but also many users are non-developers, in which case a WYSIWYG would make more sense for them#2021-02-2417:13Jakub Holý (HolyJak)One thing I did not get - can I post links to external content, as I would in .md do with [my title]() ?#2021-02-2417:14jeff tangyes#2021-02-2417:29eccentric JI had made a visual to help explain zettelkastens more https://clojurians.slack.com/files/U8WFYMFRU/F01N8D0SX5F/zettelkasten.pdf (still a rough draft) and there’s some other discussion about it in https://clojurians.slack.com/archives/C03RZGPG3/p1613078474271900.#2021-02-2417:38eccentric J@UR0KX1MRT I use Notion for my zk but org-roam is another great option for emacs using org-mode.#2021-02-2409:07jonpitherCrux 1.15.0 is out 🚀 🎉 • We've made the Java API for submitting transactions much more IDE-friendly - Java users can now construct transactions programmatically through the new Transaction APIs. • Another oft-requested feature: queries can now return maps, using the `:keys`/`:syms`/`:strs` syntax • Bugfixes - and more details at https://github.com/juxt/crux/releases/tag/21.02-1.15.0 Thanks 🙂 Have a scout of the #crux channel for more on this release.#2021-02-2409:53kimimJust create a very simple ECharts lib, welcome to have a try: https://github.com/kimim/re-echarts#2021-02-2411:08borkdudedeps-infer: Infer mvn deps from sources. https://github.com/borkdude/deps-infer Thanks @hiredman for the idea. For now this is just a POC but I thought it would be cool to share in case anyone wants to contribute.#2021-02-2411:12p-himikI'm curious - what might be some of the use cases? I can only think of somehow losing deps.edn.#2021-02-2411:16borkdude@U2FRKM4TW For babashka scripts this could be useful if you want to port your script to the JVM and you want to compile it with GraalVM for example#2021-02-2411:18p-himikAh, nice, thanks!#2021-02-2411:33borkdudeThis can also be useful when you want to compare the newest deps in your .m2 with the ones you already have. Or when you want to migrate your git libs to mvn ones :)#2021-02-2411:51flowthingI imagine it could also be useful if you use clojure.tools.deps.alpha.repl/add-libs to hot-load dependencies and you want to save your state into a deps.edn file.#2021-02-2411:55borkdudeThis can also be a useful addition to clojure-lsp. Type (:require [clojure.tools.cli]) and it will be interactively added to deps.edn. cc @UKFSJSM38#2021-02-2412:11ericdalloLooks valid, not sure what's version would add in deps.edn though#2021-02-2412:29ericdallooh got it, that's deps-infer responsibility, really nice#2021-02-2412:36borkdudeI found another nice use case: you want to port a lein project to deps.edn (but don't want to rewrite the project.clj yourself)#2021-02-2412:37borkdudeor a boot build.boot file (which is arguably harder because of code instead of config)#2021-02-2412:43ericdallooh, that I could use on clojure-lsp itself 😆#2021-02-2412:46vemvExtra use case (and long wanted one!): making implicit dependencies explicit e.g. maybe I'm actively using math.combinatorics in my project, but it's in my classpath because it's a transitive dep of some other dep.#2021-02-2412:46borkdudeAnother use case: see which deps you are actually NOT using in your original deps.edn#2021-02-2413:15p-himikAlthough this can give false positives when you wanted to pin a particular transitive dependency to a particular version or include some plugin that some other dependency (or your code) uses dynamically.#2021-02-2413:21borkdudeif you wanted to pin that version, why not include it explicitly with that version?#2021-02-2413:21borkdudeyeah, false positives can happen, this is probably why you should manually review the output#2021-02-2413:37p-himik> if you wanted to pin that version, why not include it explicitly with that version? That's what I meant. Your project is using lib /cdn-cgi/l/email-protection which uses /cdn-cgi/l/email-protection You know that /cdn-cgi/l/email-protection has a bug that's been fixed in /cdn-cgi/l/email-protection that's backwards compatible with /cdn-cgi/l/email-protection Naturally, you include the /cdn-cgi/l/email-protection in your deps even though your project never uses it directly. Perhaps, deps-infer deals with that already by analyzing not only your code but also the code/dependencies of your dependencies. It's not obvious to me given the README.#2021-02-2413:39borkdude@U2FRKM4TW I see, yeah, in that case I think you should put a big fat comment in your deps.edn saying why you included that dep#2021-02-2413:40borkdudeYou can --analyze all of your own code + dependencies, but then you will get a list of suggestions for all transitive deps as well#2021-02-2416:53hiredmanThe use case I have is, I know the api for a number of libraries well, so I can sit down and write a clojure program that uses them, and then suddenly I have make a deps.edn to run it, and I have to Google around to find maven coordinates.#2021-02-2416:54hiredmanWhich is really dumb since the information is actually all already on my local ssd#2021-02-2416:58hiredmanmy local m2 is over 2.5 gigs and I must have been copying it forward across 2-3 laptops because it contains artifacts like the fork of clojure we used at work briefly 8 years ago#2021-02-2416:59hiredmanhttps://clojars.org/mantle/clojure#2021-02-2417:06p-himikOh god, you made me recall how we had ~45GB .m2 dir for a legacy project. And that's on a fresh install. What a nightmare it was to work with.#2021-02-2417:07hiredmanyeah, so so much of the information about libraries is already there#2021-02-2417:28orestis@hiredman you would just type it without a REPL connection?#2021-02-2417:28hiredmanyes#2021-02-2417:29orestisI think in theory I could do that but without the REPL I just feel naked in a thorny forest#2021-02-2412:26superstructor[re-frame "1.2.0"] a framework for building user interfaces, leveraging React. Headline: Upgrade to reagent 1.0.0 and React 17. https://day8.github.io/re-frame/releases/2021/#2021-02-2412:28superstructor[re-frame-10x "1.0.0"] A debugging dashboard for re-frame. X-ray vision as tooling. Headline: Upgrade to reagent 1.0.0 and React 17. https://github.com/day8/re-frame-10x#2021-02-2412:30superstructorre-frame-template 1.4.0 A lein template for re-frame aka lein new re-frame <app-name> Headline: • Upgrade to reagent 1.0.0 and React 17 • Upgrade to re-frame 1.2.0 • Upgrade to re-frame-10x 1.0.0 • Upgrade to re-com 2.13.2, and add example of new re-com debugging features. https://github.com/day8/re-frame-template#2021-02-2420:44wilkerlucioPathom Viz 2021.02.24 is out! https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.2.24 On this release: - Improved auto-complete - Set larger minimum side for panels in general, this will avoid sections getting completly collapsed - Incorporate Tailwind CSS as part of internal designs, this already affects some of the UI and is the initial foundation for more UI standardization for Pathom Viz#2021-02-2500:56Michaël SalihiHi! I am pleased to announce that my first Clojure library is out! 🎉 https://github.com/PrestanceDesign/get-port With this lib I tried to embrace the concept of Clojure (composability, separation of concerns), so it does one things: Get an available TCP port with some options. :)#2021-02-2506:34NazralFixed a bug in my implementation of the Aho Corasick algorithm (ironically it was caused because I forgot to remove debug code), useful for fast string matching https://github.com/Tyruiop/aho#2021-02-2513:11mpenetNew https://github.com/exoscale/telex is out 0.1.6 * adds body-handler read timeout support#2021-02-2516:49Darrick WiebeI just pushed the first release of Pure Conditioning, a purely functional, fast, and cleanly decomplected condition / restart system in Clojure. It does not use exceptions and needs no global state at all. I think it can cover all Common Lisp condition/restart use cases, at least I haven't encountered any that it can't do. https://github.com/pangloss/pure-conditioning#2021-02-2519:28mike_ananevI just released a new library template. https://github.com/redstarssystems/rssyslib This `Library template` helps you to quick start new library project using https://clojure.org/guides/getting_started and https://github.com/seancorfield/clj-new. This `Library template` provides: • project control via `Justfile` (see https://github.com/casey/just) and scripting using https://github.com/babashka/babashka; • environment variables control using `direnv` utility; • editor configuration via `.editorconfig` file; • configured `clj-kondo` linter; • configured `cljstyle` formatter; • run tests using https://github.com/lambdaisland/kaocha. Project workflow:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "563b3f3d33163b34266664"}, :content ("[email protected]")}
#2021-02-2522:37localshredHi Friends! I just released a new clojure SDK for interacting with the NuID Authentication API. I'd love feedback on the library if you get a chance to check it out 🙂 NuID provides a trustless authentication service using zero knowledge proofs to make it so you never have to store passwords again. We're built on clj/s and datomic and absolutely love this community. Source: https://github.com/NuID/sdk-clojure Docs: https://cljdoc.org/d/nuid/sdk/CURRENT Clojars: https://clojars.org/nuid/sdk NuID Developer Portal: https://portal.nuid.io#2021-02-2601:22Darrick WiebeIn quick succession, I've updated Pure Conditioning to 0.1.1 to correct a couple of deployment errors. I've also created an interactive tutorial on NextJournal, so please check it out! https://nextjournal.com/pangloss/a-tutorial-on-conditions-and-restarts-in-clojure?version=latest#2021-02-2609:16lispyclouds1.0.3 of clj-docker-client is out now! It is an idiomatic, data-driven client for docker and now adds support for Mutual TLS with remote docker hosts and ability to read response streams when an exception is thrown! 😄 https://github.com/into-docker/clj-docker-client/releases/tag/1.0.3 Follow up in #docker#2021-02-2614:46Jakub ZikaGreat work. I am using it right now together with https://github.com/tolitius/Mount to provide local database.#2021-02-2722:59Alex Miller (Clojure team)snyk is running their annual JVM survey again - please complete if you use Clojure! https://snyk.io/blog/java-ecosystem-survey-2021/#2021-02-2723:03seancorfieldDone! For "What build tools do you use?" I put "Clojure CLI" 🙂#2021-02-2723:19borkdudeI put "clojure" :)#2021-02-2723:59pezFramework? Nah!#2021-02-2800:44Alex Miller (Clojure team)I put Clojure CLI too! :)#2021-02-2801:20ericdalloMe searching for a specific Emacs option and finding: "Vi/Vim/Emacs/Notepad/Atom" 😔#2021-02-2801:24seancorfieldYeah, I kind of rolled my eyes at seeing Atom in that company 🙂#2021-02-2803:37quollWhile Atom is actually for writing code, I’m wondering at the inclusion of Notepad :thinking_face:#2021-02-2809:14CaseyI'd love to watch a talk from someone who uses Notepad, I bet they have some sort of real streamlined workflow. :grinning_face_with_one_large_and_one_small_eye:#2021-02-2810:56Jivago AlvesI suppose you can do it in vim and then copy it to notepad.#2021-02-2815:52jjttjjThere's an APL dialect called co-dfns, the creator uses notepad 😱 You can see him in action here https://www.youtube.com/watch?v=gcUWTa16Jc0#2021-03-0113:04danielnealshoulda used microsoft word#2021-03-0113:04borkdudeor excel, which now supports lambdas#2021-02-2800:12seancorfieldorg.clojure/tools.cli {:mvn/version "1.0.206"} -- Command-line argument parsing -- https://github.com/clojure/tools.cli * Allow validation to be performed either after parsing (before option processing) -- current default -- or after option processing, via the :post-validation true flag [TCLI-98](https://clojure.atlassian.net/browse/TCLI-98). * Allow validation message to be a function (of the invalid argument) in addition to being a plain string [TCLI-97](https://clojure.atlassian.net/browse/TCLI-97). * Add :multi true to modify behavior of :update-fn [TCLI-96](https://clojure.atlassian.net/browse/TCLI-96). Follow-up in #clojure#2021-02-2817:44borkdudeAs a special thank you to Clojurists Together, here are new releases of clj-kondo, babashka and sci: https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20210228 https://github.com/babashka/babashka/blob/master/CHANGELOG.md#0211 https://github.com/borkdude/sci/blob/master/CHANGELOG.md#v024 and a video describing the most important features that were implemented during the 2020-Q4 funding round: https://youtu.be/P09GZVqiDdM#2021-02-2818:12Jeff EvansIt looks like the first couple of items under the Sci section (in release notes) are linking to the issue number in Babashka rather than Sci.#2021-02-2818:13borkdude@U0183EZCD0D Thanks for pointing out, will fix after dinner#2021-02-2819:55borkdude@U0183EZCD0D Fixed!#2021-02-2820:50Luis SantosHi everyone, I just released ffclj. ffclj is a clojure wrapper around ffmpeg and it can be used with both clojure and babashka. https://github.com/luissantos/ffclj As this is my 1st public clojure project all the feedback is welcomed. If you are curious about it or would like to see something implemented, please let know and I will do my best to help. Thanks.#2021-03-0113:24adam-jamesWow, this is exciting! I had made a babashka script to help me automate some video editing tasks with ffmpeg, but I merely created functions that shell out to ffmpeg - no smart integration at all. I will have to play around with your library to see what can be done!#2021-03-0114:56Luis SantosHi @U01LR7M2B7A, I do exactly the same thing. Nothing fancy. After watching your video about clojure and ffmpeg I would say that you are doing pretty much the same. The main difference is the use of json instead of text with ffprobe, background tasks and progress notification using async channels. The later features are more important for automated long running processes.#2021-03-0115:11adam-jamesAh, thanks for watching the video 😉 A user commented the ffprobe json improvement on my gist of the code from that video. It's a smart improvement for sure. As for async channels, you're completely right about it being better for long running processes. Core.async is still a bit of a weak point in my knowledge, so I suspect i can still learn a thing or two from your work#2021-03-0508:24Steven Lombardibabashka paired with ffmpeg is definitely worth a look - thanks for this#2021-02-2821:43blueberryDeep Diamond 0.19.0 has been released! https://github.com/uncomplicate/deep-diamond#2021-03-0106:49mihaelkonjevicI’ve just released new version of Penkala (0.0.3) - a composable query builder for PostgreSQL. Now with the support for insert, update and delete queries https://github.com/retro/penkala#2021-03-0107:21myguidingstarhi @U050986L9 , thanks for bringing fresh perspective on sql to clojure community. I am grateful that Walkable is mentioned in penkala's readme. However, I think the statement "eschewing SQL and instead use EQL to write the queries" does not describe Walkable. I guess that's your experience with exoscale's esql, but esql and walkable are not the same#2021-03-0107:24myguidingstarWalkable exposes EQL for clients, but also have an adaption layer (that are hidden from clients) where you can use s-expressions (something like honeysql) to build SQL constructs https://walkable.gitlab.io/walkable/1.3.0/s-expressions.html#2021-03-0107:26myguidingstarI hope that clears the confusion. Anyway, congrats on the release#2021-03-0107:28mihaelkonjevic@U0E2YV1UZ thank you for letting me know. I’ve played around with walkable during the last year (and read the docs multiple times), and I completely missed the s-expressions part. Is that a new thing? I’ll update the readme and link to the s-expressions docs 👍#2021-03-0107:30myguidingstarno, the feature is part of walkable's core design and has been around for two years https://github.com/walkable-server/docs/blob/master/s-expressions.md#2021-03-0107:31myguidingstarthanks for your collaboration#2021-03-0107:42mihaelkonjevic@U0E2YV1UZ https://github.com/retro/penkala/commit/9749ae3ec3fc279eb0c7f2647e868cd2b489df34#2021-03-0109:50raspasovI made a simple library that allow you to stop core.async go loops: (only deps.edn :sha at the moment): https://github.com/saberstack/loop#2021-03-0110:31Dainius JocasI've made a jackson-jq wrapper for Clojure. The intended use case is to embed jq scripting into GraalVM native-images. https://github.com/dainiusjocas/clj-jq#2021-03-0114:33jtkdvlpHelper pack for core.async with focus on error propagation https://github.com/jtkDvlp/core.async-helpers#2021-03-0114:53Ben SlessWell if we're sharing core.async libraries, I'll share one I've been developing for a while: more.async: Small composable independent machines. Oriented towards building processing pipelines What is it trying to solve? I've seen too many times people reinvent the wheel at several points when building core.async processes: • producing into processing pipelines and consuming from them • batching • routing to channels • circuit breaking more.async is an attempt to solve those issues once and generically, instead of many times and ad-hoc. https://github.com/bsless/more.async#2021-03-0115:42orestisPerhaps make a request to include this in https://github.com/clojure/core.async/wiki/Libraries#2021-03-0115:43Ben Sless> last edited 2015 I had no idea that page even existed =/#2021-03-0115:45steffanI (very) recently had a change accepted to add more.async to https://www.clojure-toolbox.com/#2021-03-0115:47Ben Sless😮 thank you!#2021-03-0210:47phillDo you recommend not using periodically! and reductions!?#2021-03-0211:23Ben SlessNo reason not to use either, as both have their uses @U0HG4EHMH#2021-03-0119:08Mathieu CorbinI'm working on a new stream processing engine in Clojure, inspired by Riemann, which can be used for monitoring for example. It's still a work in progress project but I opened the repo and did an article explaining the project: https://mcorbin.fr/posts/2021-03-01-mirabelle-stream-processing/#2021-03-0120:33Adam HelinsPas mal du tout! I remember discussing Riemann with you years ago on IRC and how restarting and loosing state was indeed a pity. Glad to see the groove is still going!#2021-03-0122:36Mathieu Corbinthank you ;)#2021-03-0309:27Jakub Holý (HolyJak)Very interesting, merci! Your mention of logging got me thinking. Currently we send errors to Sentry for incident management/alerting but it is easy to exceed our quota when there is some temporary problem and the same error keeps repeating thousands of times. So I would like to put something in the middle, between our app and Sentry, that would limit the number of "repeated events" that get through. That would require writing an adapter that would expose Sentry-like API (so the clients can be used unchanged) and turned the events into the format Mirabelle understands. Next, I would need to define an event "fingerprint" so that I could detect what events actually stem from the same error condition (I guess some combination of the message and stack trace) and thus make a "throttling window" for each unique error. Finally, a sink that would pass the events that were not filtered out to Sentry. My question is: Would that be a reasonable use of Mirabelle (or some future version thereof)? Thank you!#2021-03-0422:48Mathieu Corbin@U0522TWDA It should be possible indeed. Adding sentry support should not be that difficult (it's just an http client). Mirabelle already supports the Riemann "throttle" stream, which only send one to downstream actions evey N seconds#2021-03-0422:49Mathieu CorbinSo imagine you compute a fingerprint and store it in a :fingerprint key in your event, you could do: (by [:fingerprint] (throttle 1800 ;; 30 min (push-io! :sentry)))#2021-03-0422:49Mathieu Corbinlike that, each "fingerprint" has its own throttle#2021-03-0509:16Jakub Holý (HolyJak)nice! thanks!#2021-03-0206:08Scott GriffinRecently released https://github.com/GriffinScribe-LLC/clojure-aes, a pure Clojure implementation of the Advanced Encryption Standard, supporting encryption and decryption for keys of 128, 192, and 256 bits. Check out the library, and let me know of future enhancements you'd like added.#2021-03-0211:57ikitommiWe are happy to release [metosin/malli "0.3.0"]. Malli is a new data-driven data validation and specification library for Clojure/Script. This is a big release, with 44 PRs from 17 contributors. Big thanks to everyone involved! The key new features: • Heterogeneous/regex sequences with both naked and named variants • Schema-based parsing and unparsing • Multi-arity function schemas • Runtime function checking using generative testing • Static function type checking using clj-kondo • Lot's of small improvements and better performance • No breaking changes in the public api (since initial release) • Small breaking changes in the extender api (new protocol methods etc.) https://github.com/metosin/malli what's next? join #malli to discuss and to get help getting started.#2021-03-0213:24Vincent CantinCongratulations !#2021-03-0214:49ikitommithanks!#2021-03-0215:57chrisnWe have a preview release of https://clojars.org/clj-python/libpython-clj. This is a near complete refactor removing about 1/2 the code and it brings along with it some important capabilities: • 32 bit support (!!) • JDK-16's https://openjdk.java.net/jeps/191 • Both above enabled by a new https://cnuernber.github.io/dtype-next/tech.v3.datatype.ffi.html in dtype-next. We really tightened the screws on this one. There is far less ephemeral refcounted garbage created so we bind far fewer Python objects to the JVM's GC mechanism. We carefully considered how we interact with python and we were able to remove an entire binary binding system (we no longer need direct access to PyTypeObject). The plan is for this to be a piece of software that everyone feels comfortable contributing to and that is relatively easy to port to other platforms such as graal native or perhaps to use a https://github.com/bytedeco/javacpp-presets/tree/master/cpython. For the truly geeky we used the excellent https://github.com/jgpc42/insn to generate the exact classes and function calls required dynamically for JNA or JDK-16 creating a sort of macro assembly template system. This is a preview release so it hasn't been heavily tested but it of course passes all unit tests. I am really looking forward to including our robotics friends moving forward 🙂. Enjoy!!#2021-03-0217:41aratareHi there! So after a few weeks of punching Clojure, I'm pleased to release my first Clojure library https://github.com/aratare-jp/epsilon-clj 😄 It's a codebase generator (based on Eclipse Epsilon) that can preserve custom code inside generated files throughout future regenerations. Feel free to give it a whirl 🙂 Thanks everyone.#2021-03-0217:43vemvLooking good :) I had a bit of trouble earlier understanding what the lib does... Does it generate arbitrary code? java-only? clj-only? Is it similar/different from Lein templates?#2021-03-0218:19aratareThanks 🙂 So the point of the lib is to generate code regardless of what file type you want. That's basically it. The difference between this lib and other code generator (selmer, StringTemplates, ThymeLeaf, even Lein templates, etc.) is that you can have custom code inside your generated files. So even if you rerun generation, it will still keep the code there.#2021-03-0219:09vemv> So even if you rerun generation, it will still keep the code there seems like a great feature, thanks!#2021-03-0314:16mccraigmccraigwe've been testing an alpha of the clojure cassandra client mpenet/alia for a couple of months, and we're ready for any other mpenet/alia users to try it out and report any issues the big news is that it has been ported to [com.datastax.oss/java-driver-core "4.9.0"] and the api has been updated to reflect the (considerable) API changes in that project despite those changes, once you've gotten a session set up, usage remains very similar, and we haven't encountered any difficulties in moving our workloads over - so give it a spin and let us know if you hit any problems https://github.com/mpenet/alia#2021-03-0323:45danielcomptonHi folks! Clojurists Together is holding board elections for 4 new board members. If you’ve been looking to contribute to the Clojure community, this is a unique way to do so. Applications close March 31. clojurists-together You don’t need to be an experienced Clojure dev to apply, we’re looking for people from a wide range of backgrounds and skill levels. More discussion in #cljtogether https://www.clojuriststogether.org/news/clojurists-together-board-nominations-and-annual-members-meeting/#2021-03-0408:31raspasovMy tiny Clojure(Script) Loop library is now on Clojars. https://github.com/saberstack/loop Loop allows you to take control of your core.async loops with just a bit of state (one atom). Start/stop a go-loop from the REPL or “re-define” a running go-loop by starting a new one with the same :id#2021-03-0409:02tomrbowdenJust published a ClojureScript code sandbox in the browser: https://codesunaba.netlify.app/ Open-sourced on GitHub: https://github.com/AutoScreencast/codesunaba Inspired by @thheller blogpost on Bootstrapped ClojureScript: https://code.thheller.com/blog/shadow-cljs/2017/10/14/bootstrap-support.html#2021-03-1211:49tomrbowdenI’ve given the app some polish, and added numerous examples. The app now support re-frame and cljs-ajax. Please let me know what you think. https://codesunaba.netlify.app/#2021-03-0416:04Alex Miller (Clojure team)https://clojure.org/news/2021/03/04/clojure1-10-3 is now available • Reverted https://clojure.atlassian.net/browse/CLJ-2564 "Improve error message for case" (1.10.2) due to backward compatibility issues • https://clojure.atlassian.net/browse/CLJ-2453 Enable reader conditionals in Clojure prepl (thanks Oliver Caldwell for the patch!)#2021-03-0502:13robertfwI have googled "tar.gz decompress args" for the last time, thanks to my little babashka script bunpack . If anyone else is tired of using google/their mind attic to remember how to unpack various file formats, it is available at https://github.com/robertfw/bunpack#2021-03-0507:36Ben SlessJust when I finally remember the correct args?#2021-03-0512:03bartukahttps://github.com/moonpyk/dtrx is one of the first packages I install on clean linux distros. Nice to have a clj option now 🙂#2021-03-0522:03felipebarrosI've used atool for a long time to do that, but there is another tool that has vastly improved my command line happiness in general and also addresses this case: tldr pages. tldr tar would give you a curated little list of the most common commands. I love it.#2021-03-0523:22robertfw@UBSREKQ5Q dtrx looks like a good source for more features/formats to support, thanks for sharing that#2021-03-0521:30mike_ananevI just released a new application template. https://github.com/redstarssystems/rssysapp This `Application template` helps you to quick start new application project using https://clojure.org/guides/getting_started and https://github.com/seancorfield/clj-new. This `Application template` provides: • project control via `Justfile` (see https://github.com/casey/just) and scripting using https://github.com/babashka/babashka; • environment variables control using `direnv` utility; • editor configuration via `.editorconfig` file; • configured `clj-kondo` linter; • configured `cljstyle` formatter; • run tests using https://github.com/lambdaisland/kaocha. This template will give you the following basic project workflow:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "d1bcb8bab491bcb3a1e1e3"}, :content ("[email protected]")}
#2021-03-0616:32nonrecursivethis looks neat!#2021-03-0521:31mike_ananevSee also newer version of library template https://github.com/redstarssystems/rssyslib#2021-03-0617:18roklenarcicI’ve release a beefed up shuffle function: https://github.com/RokLenarcic/cljc-shuffle#2021-03-0623:36seancorfieldcom.github.seancorfield/next.jdbc {:mvn/version "1.1.643"} -- https://cljdoc.org/d/com.github.seancorfield/next.jdbc/1.1.643/doc/getting-started -- minor changes since 1.1.613: improved GraalVM compatibility, document/test allowMultiQueries=true for MySQL, document next.jdbc.transaction/*nested-tx*, double-publishing under com.github.seancorfield and seancorfield groups as I shift my libraries to Verified Group Names per Clojars recent announcement -- follow-up in #sql for the library or #clojars for the group name policy.#2021-03-0623:40ribeloi wrote a minimalistic clone of pathom, for fun and for fame. maybe someone will find it useful https://github.com/ribelo/pathos#2021-03-0709:28Karol WójcikCongrats mate!#2021-03-0718:46jeff tangAthens Research budgets $10,000 in bounties for 20 issues over the next 3 weeks. Learn more about this bounty program here: https://www.notion.so/athensresearch/Bounty-Experiment-3-07-21-3-28-21-d2839e46b19b4bf9aeb6299845974622#2021-03-0718:50eggsyntaxNext time I'd say this would be better in #news-and-articles, please. Thanks!#2021-03-0718:50jeff tangWill do sorry!#2021-03-0718:51eggsyntaxNo stress, it's kind of an edge case#2021-03-0718:52jeff tangHopefully not for long#2021-03-0718:54eggsyntaxWell, we've tried to keep #announcements to be new project or project version announcements, since so many people get notifications for it. It does definitely seem like there's lots of excitement about Athens; definitely a really cool project!#2021-03-0719:21seancorfield(thanks @U077BEWNQ -- I was just about to say the same since this is not a project/library release announcement)#2021-03-0719:25seancorfieldI see you posted this in #jobs as well @UUY06DFL5 so it really should not be in #announcements as well.#2021-03-0719:30jeff tangDeleted#2021-03-0719:31seancorfieldThank you.#2021-03-0722:08noogaI’d like to share a hobby project of mine -> A Bytecode VM and compiler for a Clojure-like language: https://github.com/nooga/let-go 🚨 This is not a Clojure lib, in fact it’s not even written in Clojure. Nevertheless, I think it belongs here :thinking_face: 🐥 It’s super early stage (16 days old) but already starts resembling everybody’s favourite language. Hope you find it interesting:crossed_fingers:#2021-03-0807:55Ben SlessSomething I've been wondering about since coming across this project - if I understand correctly, the compiler targets the VM? Is your end goal something like gccemacs's native-compiler? Did you consider the approach of plugging in to Golang's compiler internals and just generate ASTs directly from the code? That would require dynamic linking at runtime and I'm not sure if that's even possible#2021-03-0813:43nooga@UK0810AQ2 yes, the compiler targets the VM. I have chosen this approach to get a constrained execution environment decoupled from the language itself. This way it should be easier to optimize for runtime performance eventually and, perhaps even use the bytecode as IR for another stage that would produce machine code. Your idea with piggybacking on Go compiler crossed my mind but I’m not anywhere near this yet. One could imagine being able to dump the VM state as a standalone executable that would also contain the interpreter (compiler+vm) that only kicks in for the dynamic stuff. This is possible with bytecode alone but who knows where it goes in the future 🙂#2021-03-0813:48Ben SlessThank you. Do you think the decision to generate bytecode will hamper you in the future if and when you want to emit machine code? You might end up having to write your own compiler from scratch, which is a shame because Golang has a really good compiler. How constrained would you say the execution environment is given Golang has managed memory? Do you manage memory yourself? Do you feel like going a bit in depth regarding the VM's architecture?#2021-03-0813:56noogaThe current VM is stack based, just a for loop with a big switch inside. It’s utterly slow as it performs runtime checks on everything - this serves mainly as an aid in development - it’s easier to debug when something goes awry. I will slowly turn it towards unsafe when the compiler matures enough that we can trust it. One thing to note is that each call frame has its own instance of the VM and the call stack is handled by Go at the moment - this is slow but will avoid GIL.#2021-03-0813:58noogaperformance is my last priority as I want to get a correct interpreter as the baseline before I go into any attempts at speeding this up#2021-03-0814:04noogaas for compiling to machine code - when I get to it I will probably rely on an existing optimizing compiler anyway. In this case it’s much easier to translate a set of well defined bytecode instructions than it is to go from sexp level to target language/IR#2021-03-0814:07borkdudeMaybe you can target LLVM and re-use that toolchain, eventually#2021-03-0815:40nooga@U04V15CAJ either this or, like @UK0810AQ2 suggested, use Go compiler as a library and generate some Go SSA on the fly 🙂#2021-03-0800:38tony.kayFulcro 3.4.18 is on Clojars. This is a bugfix release that corrects a problem when returning a tree of data from a mutation that uploaded files. https://github.com/fulcrologic/fulcro#2021-03-0814:10oliyHi everyone, I'm pleased to announce the 0.1.16 release of Martian https://github.com/oliyh/martian Martian is an HTTP abstraction for Clojure/script, making calling remote API endpoints just like calling a function. It supports Swagger, OpenAPI and local API descriptions and can be used with any http library. This release adds support for: • Keyword -> string coercion https://github.com/oliyh/martian/issues/105 • Document and optionally merge default values https://github.com/oliyh/martian/issues/18 This release improves: • Behaviour parsing OpenAPI v3 schemas when encountering an unexpected schema https://github.com/oliyh/martian/issues/103 #2021-03-0814:32lispycloudsHello! Made this tiny lib for doing spec-first servers using #reitit and #malli: https://github.com/lispyclouds/navi Converts OpenAPI route definitions to Reitit routes and uses Malli for request coercion. Quite experimental and not quite ready for serious use. Hopefully its useful to some of you! 😄#2021-03-0815:44orestisI was dreaming about this some time ago, thanks for releasing it :)#2021-03-0815:46lispyclouds😄 hope this is useful to you! looking forward to making it more robust!#2021-03-0822:37blak3mill3rGreat idea!#2021-03-0905:32plexusThere's a new release of Kaocha, a modern and extensible test runner, featuring many improvements and fixes. Thanks to @actuallyalys_slack, @dharrigan. @socksy, and Rob Hanlon for your contributions! https://github.com/lambdaisland/kaocha/blob/main/CHANGELOG.md#10829-2021-03-08--a88ebda#2021-03-0906:46plexuslambdaisland/glogi 1.0.83 is out. Glögi is a ClojureScript logging library based on goog.log. This version handles some upstream breaking changes, and adds a lambdaisland.glogc namespace for cross-platform logging, which dispatches to io.pedestal.log on Clojure. https://github.com/lambdaisland/glogi#2021-03-0907:44raspasovNew release of saberstack/loop {:mvn/version "0.2.2"}. This is a bug fix release which fixes a concurrency bug. Loop allows you to take control of your core.async loops with just a bit of state (one atom). Start/stop a go-loop from the REPL or “re-define” a running go-loop by starting a new one with the same :id https://github.com/saberstack/loop#2021-03-0922:40blak3mill3rBrilliant! I look forward to trying this out.#2021-03-1003:37raspasov@UC681SR17 great, let me know how it goes#2021-03-0911:07Mark WardleHi. Pleased to announce hermes 0.4 release - an open source and clojure-based SNOMED CT terminology library and microservice https://github.com/wardle/hermes I use it in my electronic health record software running here in the UK - and it is part of a suite of clojure services to support electronic health and care records - answering the 'who', 'what', 'why' and 'when' of health and care. Now with much faster import and indexing, and support for the expression constraint language (e.g. answering complex queries such as does my patient have a diagnosis that is a lung disease associated with oedema) for supporting both direct care / rules / decision support and analytics. I use it to show specialist pages like specialised summaries for motor neurone disease or multiple sclerosis so the clinician sees the right information at the right time.#2021-03-0911:08Mark WardleThe other linked projects are concierge (https://github.com/wardle/concierge - integration with legacy enterprise APIs in NHS in Wales, UK), nhspd (https://github.com/wardle/nhspd - providing UK geographical services mapping postcodes to administrative regions/indices of socio-economic deprivation - I've used extensively in our research output on outcomes in multiple sclerosis), trud (https://github.com/wardle/trud - providing sane access to the UK NHS' reference data) and clods (https://github.com/wardle/clods - providing a library and microservice for UK health and care organisations. These essentially drive a tonne of logic in my health and care software - e..g find local GPs or hospitals etc. I've never been able to create so much functionality with so little code so thank you clojure!#2021-03-0917:18schmeeI don’t work in healthcare so I have no idea about the functionality, but it was really interesting to take a look at this codebase, thanks for sharing! :thumbsup:#2021-03-0917:44Mark WardleThanks! Well I have only recently started using clojure in the last year so I hope you mean "good" interesting and not "oh crumbs" interesting...#2021-03-0919:00schmeehaha, definitely the first one 😄#2021-03-0918:17nilernDebuting Monnit, just another monads library https://github.com/nilern/monnit#2021-03-0919:48lilactownas an experienced clojurian I don't really understand what the value prop of the lib is in practice; do you have any examples of how it should be used?#2021-03-0919:49lilactownin the tests I see e.g. fmap/flat-map/sconcat used on vectors, but I don't see the benefit of that over the clojure.core seq ops#2021-03-0919:50lilactownjust to clarify: this isn't a dig btw, I'm genuinely curious. it sounds like you have some concrete use cases for this and went and built a lib to handle it#2021-03-0920:22nilernThe point is not that it is somehow better to use fmap than mapv or something. I built this mostly as a basis for other libs that do stuff like async IO, parsing or algebraic effects. But the included monads can automate the plumbing around error handling, context parameters and immutable state.
#2021-03-0920:25lilactownyeah! I've been banging on my own experiments w/ async IO and effects in my spare time, and find myself having to do a lot of complex stuff with dynamic bindings, which is why I'm interested in learning how I could use more formal patterns in those efforts#2021-03-0920:25lilactownmaybe I should just wait for you to announce your other libs 😄#2021-03-0920:26nilernIt's a polarized topic; I think nil and exceptions promote bad error handling and that dynamic Vars are usually a code smell while other people think it's cool and I've just had too much Haskell.#2021-03-0920:32nilernYeah I hope the other libs will be more exciting or at least mindblowing#2021-03-0921:02mccraigmccraiglol, I've also been working on a monad lib @U4MB6UKDL ... not quite ready yet, but taking shape... https://github.com/mccraigmccraig/promisefx#2021-03-0921:06nilernI did say "just another monads library"#2021-03-0921:08mccraigmccraigmust be a mini-zeitgeist#2021-03-1001:49blak3mill3r@U4YGF4NGM and others wishing to explore the value-proposition of Monads from a clojure perspective may appreciate this talk https://www.infoq.com/presentations/Macros-Monads/#2021-03-1001:51blak3mill3rMonads are very powerful and FWIW, I am glad to see this new library from @U4MB6UKDL ... one of my favorite things about Clojure is that it can be extended so flexibly that we can poach most excellent ideas from other languages.#2021-03-1007:57Ben SlessAny chance to bother you for a sneak peak on how you intend to use it for async IO or effects?#2021-03-1008:57mccraigmccraigi like the formulation with the various effect operations implemented as different types @U4MB6UKDL ... food for thought - are you heading towards a general purpose effect-combining approach like fused-effects &c ?#2021-03-1012:01nilernSo https://github.com/nilern/taksi is my async library, the goal is something similar to Scalaz ZIO and Concurrent ML. I also have a freer monad with higher-order effects for maximum expressivity https://github.com/nilern/fell but I am not sure whether that is even a good idea; the ZIO/polysemy approach might not support backtracking with scoped resources or whatever but that is hardly called for in web apps.#2021-03-1012:08nilernObviously those should not be used yet and fell doesn't even use monnit ATM#2021-03-1012:39mccraigmccraigthis looks great - and i haven't really grokked the free/freer stuff yet, having a clojure should help me with that 🙂#2021-03-1013:03nilernIt's hard and dynamic typing probably makes it even harder. Again, not sure if bringing such a thing into Clojure is even a good idea.#2021-03-1013:12mccraigmccraigwell i won't be able to discuss that point until i've grokked them 🙂#2021-03-1013:12mccraigmccraigbut even if free/freer is not the route, i do think that there's a lot of scope for bringing effectful stuff into clojure#2021-03-1013:58nilernYes and the re-frame (-style) effects processing is very clunky, surely we can do better than that#2021-03-1014:00lodin@U4MB6UKDL How do you know which monad to use in mlet?#2021-03-1014:09nilern(mlet [a (foo 5)] ... just becomes (bind (foo 5) (fn [a] ... and bind is a protocol method. The mlet bindings could even use different monads but don't do that (seems that in Haskell do is not just syntactic sugar after all since using different monads in one do is a type error).#2021-03-1014:12lodin(In Haskell it is just sugar since bind has the type m a -> (a -> m b) -> m b; the m cannot change.)#2021-03-1014:17lodinNow I see. While you have a multimethod pure, you actually use regular function for the particular monad.#2021-03-1014:17nilern(I see it now.)#2021-03-1014:19nilernYes there is no magic to emulate return value polymorphism for pure.#2021-03-1014:19lodinThe docs for mlet is a bit misleading I think, unless I'm missing something.#2021-03-1014:23nilernYou found a bug in the docstring, the pure part would not work (unless you e.g. :refer monnit.option/pure)#2021-03-1014:25lodinTo make it work you'd have to save away the result of e.g. (foo 0) and pass that as the first argument to pure.#2021-03-1014:33nilernActually (type a). algo.monads implicitly wraps the body in the right pure and Cats sets a dynamic Var to a MonadContext so that (pure 0) usually just works (but there have been bugs).#2021-03-1014:39nilernOne of my motivations is to avoid any indirections and tricks like that. Even the pure multimethod is just for situations where pure must actually be polymorphic like helper fns/macros.#2021-03-1014:44lodinUnfortunately that approach doesn't work well with lazy evaluation, eg if you use it in a function that you use with map. Then the context might be missing, or even the wrong context, when running the function.#2021-03-1014:48nilernAs I said earlier I usually see dynamic Vars as a code smell. The Reader monad should be less fragile (but the Cats implementation uses dynamic Vars 🤯).#2021-03-1017:55nilernI put out 0.1.2 with docstring improvements https://cljdoc.org/d/com.deepbeginnings/monnit/0.1.2/api/monnit.core (thanks @U8J6W2SC8!)#2021-03-1022:42lreadrewrite-clj 1.0.572-alpha is available. The rewrite-clj library is used to parse and rewrite Clojure/ClojureScript/EDN source from Clojure and CloureScript while preserving whitespace. After a long, pleasant and circuitous journey, I am pleased to announce the first v1 (alpha) release of https://github.com/clj-commons/rewrite-clj. This release dusts off a well loved Clojure library, and adds https://github.com/clj-commons/rewrite-clj/blob/main/CHANGELOG.adoc#rewrite-clj-v1. Notably, it merges in, and brings up to feature parity with rewrite-clj v1, the functionalities of https://github.com/clj-commons/rewrite-cljs. The release is looking solid to me, but I expect there to be issues and feedback, hence the alpha status. Thanks to a wonderful community for all the help and delightful interactions. And much thanks to @rundis for rewrite-cljs and @yannick.scherer for rewrite-clj v0. All with an interest are most welcome to drop on over to #rewrite-clj to chat.#2021-03-1110:12Ertugrul CetinWe have been working on a project called Code 3D World. We are thrilled to announce that the first version is released 🎉 Code 3D World is interactive, and batteries included a 3D coding platform for beginners. https://github.com/ertugrulcetin/code3dworld#2021-03-1117:10Jakub ZikaWhat do you use for 3d rendering? Just webgl?#2021-03-1117:50blak3mill3rCongrats! This is a wonderful idea.#2021-03-1119:14Ertugrul Cetin@UL8KUA286 JMonkeyEngine, which uses lwjgl underneath#2021-03-1119:17Ertugrul Cetin@UC681SR17 Thanks! Glad you liked it.#2021-03-1119:39blak3mill3rIt reminds me of https://en.wikipedia.org/wiki/Turtle_graphics from my childhood... but has the potential to teach so much more.#2021-03-1118:01chrisnWe have something really special today in libpython-clj news. Aside from continued work to stabilize v2 we have built a way to https://clj-python.github.io/libpython-clj/embedded.html!! This sidesteps a ton of issues of trying to setup the correct embedded python environment from Clojure and instead allows a primarily Python system to run arbitrary Clojure code -- I am really excited about this possibility. In any case, itemized updates: • Many bugfixes to allow v2 to automatically detect python on more systems. • the libpython-clj project is now https://github.com/clj-python/libpython-clj/blob/master/deps.edn. • You can run a Clojure repl from a Python host!! Come sit right at the technical cutting edge: https://github.com/clj-python/libpython-clj#2021-03-1121:05raspasovThat’s the ultimate inception! So I guess that’s “similar in spirit” to how Clojure runs within the JVM?#2021-03-1121:34xcenoOh my god, you might have just enabled me to (finally) script Unreal Engine with Clojure! 🤯#2021-03-1121:38emccue@U012ADU90SW wait what#2021-03-1123:48chrisn@U050KSS8M - It is similar in that spirit and it uses libpython-clj to do the interop with the host language where necessary. Physically what happens is python loads java via a shared library and creates a vm object with a classpath provided by the clojure command line program. From there you can do things like find class, call static method, etc. Then we bootstrap Clojure, nrepl, cider, and off we go.#2021-03-1202:24raspasov@UDRJMEFSN Very cool, yes. I used libpython-clj a few months back. Was mostly a very good experience! Will report when I get a chance to try this new version. Is there a full/real JVM running within Python in this case?#2021-03-1203:15gigasquidFantastic work#2021-03-1209:37Lasamazing!#2021-03-1212:36chrisn@U050KSS8M - yes, when you install the JDK or the JRE it installs both a java executable and a shared library for embedding java in another system. In the embedded case we use javabridge which calls java on the command line to find the shared library and then loads that. AS far as I can tell it is a real JVM.#2021-03-1212:53xceno@U3JH98J4R haha yeah, i don't want to hijack this thread. but feel free to ping me if you want. TLDR: UnrealEditor is scriptable via python since V2.22 or so, and I've dabbled around with ECL and CLJS for runtime stuff, but nothing serious yet#2021-03-1213:01raspasov@UDRJMEFSN Thanks for the detailed explanation! And, I assume, that JVM shares memory with the Python runtime?#2021-03-1214:13kwrooijen@U012ADU90SW Wouldn't this require you to embed the JVM in unreal?#2021-03-1214:15xcenoYes, but there are already projects out there that embed V8, Python and all kinds of other stuff. So I know it works in theory. You don't want to have clj calls in tight gameplay loops of course, but for the stuff we do which involves a lot of pre-processing, server calls and stuff it would be great. It would also be completely different than what arcadia does with unity. So I look at it as a great additional tool, rather than a complete replacement for c++, or blueprints (for now).#2021-03-1214:57chrisn@U050KSS8M - Yes exactly. So zerocopy pathways should work. Shared memory space for better or for worse. Well, up until you use the python multiprocessing module then of course you have Y shared memory spaces.#2021-03-1217:27phronmophobicclj-cef 0.9.4 is now available. This release adds support for linux. clj-cef provides clojure bindings to the Chromium Embedded Framework. Embed, host, automate, instrument, or inspect a fully HTML5-compliant web browser. https://github.com/phronmophobic/clj-cef example: https://github.com/phronmophobic/htmltoimage#2021-03-1217:34wilkerluciodo you think that's easy to inject for example in Reveal?#2021-03-1217:35wilkerlucio@U47G49KHQ#2021-03-1217:43phronmophobicit depends on what you mean by easy and inject 😛#2021-03-1217:43phronmophobicI thought Reveal already had a web view?#2021-03-1217:46vlaaadJavaFX's web view kinda sucks#2021-03-1217:47vlaaadIf would be great to have something like chrome as JavaFX web view#2021-03-1217:51wilkerlucioyes, I already have some cases that don't work in the JavaFX web view, that could be game changer for using Web based things to visualisations inside Reveal#2021-03-1217:51phronmophobicInteresting. It's definitely not as easy as using the built in JavaFX component, but if there's interest, I would be happy to work with someone to make that work.#2021-03-1217:53phronmophobicthere are at least two major caveats: • clj-cef doesn't have a windows build • the cef framework is rather huge (300MB on OSX and 1GB linux)#2021-03-1218:05wilkerlucioI would love to have that, I used JxBrowser with success in reveal, it works great, but the huge caveat is that is paid (and quite expensive), so I only used during the 30 day trial#2021-03-1222:48phronmophobic@U066U8JQJ, how did you integrate JxBrowser? Did you write a reveal plugin? Is that available somewhere?#2021-03-1309:04vlaaadIIRC jxBrowser has javafx nodes#2021-03-1309:04vlaaadhttps://bitbucket.org/chromiumembedded/java-cef/issues/163/provide-javafx-node-for-jcef found this jcef issue from 6 years ago, still unresolved 😕#2021-03-1309:22phronmophobicthe jcef project does a bunch of stuff that I think complicates things. clj-cef uses the cef c api directly. I already having a working example that draws to a BufferedImage, https://github.com/phronmophobic/clj-cef/blob/main/examples/htmltoimage/src/clj_cef/htmltoimage.clj#L36. I also have an example that works on top of skija, https://github.com/phronmophobic/clj-cef/tree/main/examples/browser. I'm pretty sure it would be possible to get something that's JavaFX compatible.#2021-03-1313:15wilkerlucio@U7RJTCH6J sadly I can't find the code I used for the JxBrowser#2021-03-1320:24phronmophobicthere are a couple options for integration. how did you use the browser in your workflow and what were the cases that didn't work for the built in JavaFX webview?#2021-03-1220:33blueberryDeep Diamond 0.20.0 released with DNNL upgrade to 2.1.1. https://github.com/uncomplicate/deep-diamond#2021-03-1221:44lilactownFormally announcing my library https://github.com/lilactown/autonormal, which provides two cool capabilities: • Quickly normalize nested maps into a flat, tabular structure • Quickly pull data out of nested maps and/or normalized maps using EQL [lilactown/autonormal "1.1.0"] is available on clojars. Praise and feedback is welcome via DM on slack or issues on github 😄#2021-03-1322:44uochanJust released antq ver 0.12.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq - Support detecting dependencies which has unverified group name (e.g. seancorfield/next.jdbc -> com.github.seancorfield/next.jdbc ) - Support detecting versions in 3rd-party GitHub Actions such as https://github.com/DeLaGuardo/setup-clj-kondo - Changed GroupId to "com.github.liquidz" which is verified by clojars.#2021-03-1322:46borkdudeThank you! I was looking at your tool recently with @UE21H2HHD and we wondered how you manage to package gitlibs (like rewrite-clj at the time) to clojars?#2021-03-1322:47borkdudeGood to see you moved to the clojars alpha now! https://github.com/liquidz/antq/commit/4a248e3be52c7fc9e6a0f5435d06a560a1721bd2#2021-03-1322:48lreadoh awesome, another rewrite-clj v1 user!#2021-03-1322:55uochan@U04V15CAJ I'm not sure if this answers your question, but I'm just deploying the JAR created by depstar.#2021-03-1322:56uochan@UE21H2HHD Thanks for your great work!#2021-03-1322:57borkdude@U04V70XH6 Does depstar automatically include sources of gitlibs in a jar?#2021-03-1322:57borkdudeif you inspect ~/.m2/repository/antq/antq/0.11.2/antq-0.11.2.jar you will see rewrite_cljc sources in there which were from a gitlib#2021-03-1323:49seancorfield@U04V15CAJ Yes, because :local/root and :git/url on the classpath look just like :paths so they are all treated as “source” code for the JAR. Folks building JAR files with such dependencies should probably use :exclude to ensure such things don’t leak into your libraries.#2021-03-1323:50seancorfieldThat’s mentioned in the README but only under AOT compilation at the moment: “(which normally corresponds to your own project’s source files, but will also include :local/root dependencies and :git/url dependencies, since those show up as directories on the classpath)”#2021-03-1323:52seancorfieldhttps://github.com/seancorfield/depstar/issues/73 so I’ll remember to make that clearer.#2021-03-1407:52borkdudeThanks. In this case it actually worked out but in general it might not be a good idea to package someone else’s code #2021-03-1405:24tony.kayI’m happy to announce a release of Fulcro that includes an often-requested feature: Better interop with, well, everything (raw React, Reagent, Reframe, name your react library of choice). This means you can now use Fulcro to control your full-stack story without having to rewrite your entire app to do so. Adopt it for transaction/network/state processing where you want that leverage. The work is in-progress, but I think the additions (which so far are only about 170 lines of code) allow Fulcro 3.4.20 to be easily embedded anywhere (and in any number of places at once) in the UI tree of any React app. This support leverages React Hooks, and you can see a very simple example of it being used in a workspaces card here: https://github.com/fulcrologic/fulcro/blob/develop/src/workspaces/com/fulcrologic/fulcro/cards/composition_cards.cljs The implementation is in an alpha namespace (https://github.com/fulcrologic/fulcro/blob/develop/src/main/com/fulcrologic/fulcro/alpha/raw_components.cljc), and will be integrated into the main library as soon as it is widely tested and refined. https://github.com/fulcrologic/fulcro#2021-03-1421:04Candidjoker v0.16.0 is released: https://github.com/candid82/joker/releases/tag/v0.16.0#2021-03-1512:18blueberryNeanderthal 0.40.0 has just been released! High speed vectors and matrices on CPU and GPU. Two books available that teach both theory and practice. Lots of code inside! https://github.com/uncomplicate/neanderthal#2021-03-1514:58pezSay Hello to Calva’s Getting Started REPL. For the past more than a month I have been busy trying to improve the somewhat weak Getting Started story of Calva. It became apparent that requiring the user to have a project was a bit too high a threshold to set up. Thus the Getting Started REPL was born. Using @borkdude’s deps.clj I could bring the user setup down to having just VS Code/Calva + Java. Then firing off one command in Calva will bring up an editor-connected Clojure REPL, in just a few seconds. It will also bring up three files that work like Interactive Programming guides: • hello-repl.clj – The basics of how to evaluate code in Calva • hello-paredit.clj - A super brief intro to Calva structural editing • hello-clojure.clj - The very basics of the Clojure language That first guide has already raised the level of the problems users report with using Calva. Things we long-time Calva users take for granted are now introduced in a proper way. That last guide is what has had me most occupied. It will keep occupying me for quite a while more, actually. I am hoping it will serve the same service to Clojure as that Calva guide does for Calva. Wish me luck with this work, please. Here’s a demo of the feature and both those guides: https://www.youtube.com/watch?v=O6GrXXhCzCc Please help us share the demo video to people curious about picking up Clojure. (If you think it is any good for that, of course.)#2021-03-1515:01pezIn addition to the Getting Started feature, these things are new in Calva since last announcement (iirc). • Implementation detail: https://github.com/BetterThanTomorrow/calva/pull/1053https://github.com/BetterThanTomorrow/calva/issues/1057 • Add custom REPL snippet variables, $selection, $head, and $tail • Fix: https://github.com/BetterThanTomorrow/calva/issues/1047 • Revert switch to cljs for lsp, until https://github.com/BetterThanTomorrow/calva/issues/1044 has been fixed • https://github.com/BetterThanTomorrow/calva/issues/1025 • Fix https://github.com/BetterThanTomorrow/calva/issues/814https://github.com/BetterThanTomorrow/calva/issues/1003https://github.com/BetterThanTomorrow/calva/pull/981https://github.com/BetterThanTomorrow/calva/issues/529https://github.com/BetterThanTomorrow/calva/issues/860https://github.com/BetterThanTomorrow/calva/issues/1016https://github.com/BetterThanTomorrow/calva/issues/1011https://github.com/BetterThanTomorrow/calva/issues/1008https://github.com/BetterThanTomorrow/calva/issues/1005 • Fix: https://github.com/BetterThanTomorrow/calva/issues/975https://github.com/BetterThanTomorrow/calva/pull/995https://github.com/BetterThanTomorrow/calva/issues/950https://github.com/BetterThanTomorrow/calva/issues/986 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1000 • Fix: https://github.com/BetterThanTomorrow/calva/issues/976 #2021-03-1517:37Jakub Holý (HolyJak)Awesome initiative with the intros, thank you! I planned on contributing but just couldn't find the time... 😢 And an impressive change log!#2021-03-1522:25borkdudeBabashka 0.3.0: finally a binary available on linux aarch64! This means you can now have fast Clojure scripting on Raspberry Pi (64bit)! 🎉 https://github.com/babashka/babashka/blob/master/CHANGELOG.md#030 I will send free babashka stickers* to those who will post a photo of bb running on their aarch64 device (Raspberry Pi4, Chromebook, ...) on Twitter. Show the output of uname -m along with bb -e '(println :hello :world)'. Use the hashtag #babashka *) until I run out Special thanks to #circleci#2021-03-1522:59just.sultanovThe next ninja tool is now available - ninja.platform/javac v0.0.1. It is a Clojure library for compiling Java source code. https://github.com/just-sultanov/ninja.platform/blob/master/docs/ninja.tools/javac.adoc#2021-03-1611:38vemvlooks nice! what would be the elevator pitch vs. Leiningen's javac?#2021-03-1614:17just.sultanov@U45T93RA6 lein javac doesn’t work with deps.edn#2021-03-1602:55djblueI just released https://github.com/djblue/portal https://clojars.org/djblue/portal/versions/0.10.0 🎉 Watch the video for some of the highlights and https://github.com/djblue/portal/blob/master/CHANGELOG.md is available for a complete changelog.#2021-03-1616:15Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.814 is now available! • git deps: switch from using jgit to shelling out to git (must be git >= 2.5) - big thanks to @ghadi for all the initial work on this! ◦ New env vars for control: ▪︎ GITLIBS_COMMAND - command to invoke when shelling out to git, default = git ▪︎ GITLIBS_DEBUG - set to true to print git commands and output to stderr, default = false • Made git fetch only when shas can’t be resolved to improve performance • Bump dep versions for tools.cli and aws api to latest (in particular, moves transitive jetty deps to latest, past a CVE) • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.11.905 In general, this should resolve a large set of differences between using git deps through clj vs git at the command line, since they are now the same. Some additional benefits include a smaller deps footprint, and better performance.#2021-03-1810:17imreHey Alex, do you know when the official docker images will get updated by any chance?#2021-03-1812:11Alex Miller (Clojure team)No, I don’t have any connection to those#2021-03-1812:12imreThanks anyway, I'll try to find out who to nag, then 🙂#2021-03-1913:50imreI managed to find that out only to be advised that this version is still listed as pre-release at https://github.com/clojure/brew-install/blob/1.10.3/CHANGELOG.md Is that still accurate? It doesn't seem like it's a pre-release from your announcement#2021-03-1913:51imrehttps://github.com/Quantisan/docker-clojure/pull/105#issuecomment-802843983 FYI#2021-03-1914:04Alex Miller (Clojure team)nope, I just forgot to update that, will do#2021-03-1914:06Alex Miller (Clojure team)done#2021-03-1914:09imreThanks a million!#2021-03-1914:11Alex Miller (Clojure team)there are several other places indicating it's a stable release - https://clojure.org/releases/tools, https://github.com/clojure/brew-install/blob/1.10.3/stable.properties, https://github.com/clojure/homebrew-tools/blob/master/Formula/clojure.rb#2021-03-1701:10pezWant to easily tap> those let bindings? Please give taplet a try. It has a macro named let> that you can use instead of let that will tap the binding box. It is WIP and I would love me some feedback. Read a bit more about it at ClojureVerse: https://clojureverse.org/t/lets-tap-with-let-a-k-a-my-first-macro-taplet/7361#2021-03-1701:34Vincent CantinI am announcing the Girouette CSS library. • Specifically designed to be as easy to customize as possible. • Purely functional, no side effect or global registry. • Written in CLJC, runs everywhere, suitable for virtually any use case or Clojure tech stack integration. • Has grammar rules which, when used, provides a full compatibility with all of Tailwind's CSS classes. • Its source code processor finds the CSS classes your program is using. • Generates and updates a CSS file while you are developing. • Does basically the same as Tailwind-JIT, but in pure Clojure. Github project: https://github.com/green-coder/girouette Video presentation: https://www.youtube.com/watch?v=Tnv6SvZM6tg Slides: https://app.pitch.com/app/public/presentation/7282e9fa-8789-43bc-8b2d-eaec38711d98 Short GIF demo: https://twitter.com/VincentCantin/status/1365980792325726212#2021-03-1702:51Vincent CantinPeople interested to talk about the project can join the #girouette channel.#2021-03-1707:46Michaël SalihiBravo Vincent ! Little typo, "Written in CLJC, run everywhere" instead CLJS.#2021-03-1707:47Vincent CantinThank you 🙂 Typo fixed.#2021-03-1717:10pezAh, I see. That confused me. I thought there were some magic involved. 😃#2021-03-1722:04Jakub Holý (HolyJak)A great stuff, thank you! And another typo > Girouette also make it easy to use you own grammar rules Should likely be "your"?#2021-03-1808:14Vincent Cantinthank you, it's fixed#2021-03-1712:49practicalli-johnMonthly update of the practicalli/clojure-deps-edn project containing a wide range of community tools for Clojure CLI (deps.edn) projects Monthly library version update via the alias `:project/outdated` which uses antq project. The full changes are documented in the change.log. Highlights include: • new :service/webserver zero-config command line HTTP server using the nasus project • new domain names for antq, depstar and next.jdbc (reported by antq 0.12.0) • com.github.liquidz/antq - version 0.12.0 • cider/cider-nrepl - version 0.25.9 • djblue/portal - version 0.10.0 • lambdaisland/kaocha - version 1.0.829 • org.clojure/data.json - version 1.1.0 • seancorfield/clj-new - version 1.1.264 • com.github.seancorfield/depstar - version 2.0.193 • com.github.seancorfield/next.jdb - version 1.1.646 • vlaaad/reveal - version 1.3.196 https://github.com/practicalli/clojure-deps-edn#2021-03-1716:25seancorfield@U05254DQM clj-new has also started to be published under a new domain com.github.seancorfield (as well as the old one). All of my libs will be double-published for a while, to allow folks to switch over gradually.#2021-03-1717:42practicalli-johnUsing antq picked up the change in depstar and next.jdbc, but hasn't reported the change for clj-new. I'll do a little experimenting as to why and update clj-new soon anyway. Thanks. Great to have this approach being adopted.#2021-03-1713:44Mark WardleAnnouncing clods - a (niche) health and care library/microservice/HL7 FHIR server for organisational reference data in the UK. Find local hospitals or GP surgeries within a range of any UK postal code, or track organisational change over time. https://github.com/wardle/clods Designed to be embedded in larger services, requiring only a local filesystem to operate, but can also run as a standalone server if needed, including a FHIR R4 option if required.#2021-03-1717:02henryw374new minimal clojure wrapper over log4j2: https://github.com/henryw374/clojure.log4j2 My requirement was to be able to log data - meaning logging that data into a db, without going via string representation, whilst keeping all existing java logging config working. As far as I could see the only thing capable of that is log4j2 and although clojure.tools.logging can use log4j2, it stringifies messages before they get to the implementation#2021-03-1717:24tanzoniteblackIn case you weren’t aware, you can do this kind of thing with timbre ( https://github.com/ptaoussanis/timbre ). It allows you to send the logging info to a clojure function, which you can then update to do whatever you want with the structured data. built in postgres appender (which would need modified to not force a string): https://github.com/ptaoussanis/timbre/blob/master/src/taoensso/timbre/appenders/3rd_party/postgresql.clj and here’s an example of an appender I wrote to send structured json data to insightops (formerly logentries), which is probably a decent model for how you might want to send data over to your DB https://github.com/yummly/logentries-timbre-appender/blob/master/src/yummly/logentries_timbre_appender.clj#L55#2021-03-1717:25tanzoniteblackto get it to work with log4j, in case you already have java libraries using that and you need to capture those logs as well, you’d need https://github.com/fzakaria/slf4j-timbre as the log4j appender#2021-03-1717:30henryw374Thanks.. if you see in the references there is a clojureverse discussion where people mention scaling issues with timbre, so that put me off#2021-03-1717:33tanzoniteblackah, interesting. We use timbre in all of our clojure services at Yummly and have never noticed any scaling issues. We’ve overloaded the underlying insightops logger before, but never had issues with timbre itself#2021-03-1717:34tanzoniteblackI wonder what those issues were (don’t see a link in the clojureverse explicitly talking about it, but I might just be overlooking it)#2021-03-1717:43henryw374Yeah I don't know.... It may just be FUD. Also ppl talk there about dependency hell probs with it. It might be great now I don't know. Sticking with log4j2 seemed like safe bet.. big community etc#2021-03-1717:55tanzoniteblackyep! definitely can’t hurt sticking closer to the raw log4j2. Just wanted to make sure you were aware of the other existing options!#2021-03-1718:01henryw374Thanks @U236LQYB0, much appreciated!#2021-03-1720:06vemvmy experience with timbre + slf4j-timbre has been mixed. essentially timbre is a library that, in its own words, rejects the whole java ecosystem; that kind of makes sense but at scale, inevitably one has to deal with arbitrary Java dependencies that do assume slf4j and friends. So delegating such a crucial functionality to an unofficial 3rd-party lib is not exactly ideal. I'm happy clojure.log4j2 exists; thanks Henry! Will keep an eye on it#2021-03-1720:35steffanμ/log is another logging library that logs data rather than strings, though it does not aim to wrap or target Log4J. The design notes on its internals mention considerations (among others) for speed and having few dependencies, so you may find it interesting if these matters are of concern. https://github.com/BrunoBonacci/mulog#2021-03-1721:20niwinzIf you want to log data with log4j2 you, can use the JSON Layout. Right now we are using ZMQ appender with JSON layout, and then a simple subscriber thread on clojure part that sends the logs to Loki. (I know, an other option is create an appender, but this solution was very easy to setup). If you wan't code references just ping me.#2021-03-1722:18henryw374Thanks @U2C6SPLDS for mulog info - I did see that one before but I was looking for full integration with existing log setup ideally. Also, when you have a well established java library, I feel clojure projects would do well to explain what pros/cons they have in comparison. Having read the readme and now watched the video, the appenders, context info & api seem basically the same. the trace bit of mulog looks nice, but would just be one simple macro to add? on log4j2 pluses, I have docs, stackoverflow-ability, blogs, recommendations etc etc re:performance - I can't see in mulog readme what tests have been done vs log4j2 or others#2021-03-1722:21henryw374@U06B73YQJ - it seems getting data via a layout is a bit of hacky though? and writing appender seems straightforward... got one in progress for influx for example https://github.com/henryw374/influx-log4j2-appender/blob/master/src/com/widdindustries/InfluxDbProvider.clj thought I'd have to AOT it but no#2021-03-1808:34rickmoynihan@U051B9FU1: Well done for taking the time to make this library. I feel like it does fill a hole. As others have mentioned I dislike timbre, as I’ve been burned by it pretty much everytime I’ve seen it included in a project (maybe 2 or 3x). We’ve standardised most of our apps on log4j2 via SLF4j and clojure.tools.logging. I 💯 % agree with staying close to an established java logging system; and also think log4j2 is one of the best (if not the best) choice for a backend. As far as I’m concerned the benefits of using edn over xml to configure the logger are far outweighed by the practicalities. I’d also certainly like all logging to be data; but we also use SLF4j to capture and redirect logs from java libraries that use different logging frameworks. Unfortunately these can’t really be retro fitted to log data, so I’m not sure it makes much sense for us to switch to this… though I guess in principle we could have a clojure data log and send everything else to other non-data logs. Regardless, I just wanted to say, that knowing far more than I ever wanted to about the java logging eco-system, I agree with your analysis and approach here.#2021-03-1809:44henryw374Thanks @U06HHF230! To explain more about my own plans, I'm aiming for a gradual approach. I had a logback/clojure.tools.logging setup with log events coming out as json string in stdout, e.g. {level "INFO" message "foo" anMDCfield "yay"} - and that continues to work after switching the backend to log4j2, for both my application's log statements and those from 3rd party libs. now I'm adding/changing my application logging to use the log4j2 data api, and having the existing appender keep working - only now I'm optionally adding other data fields ofc. In addition, I've now got other appenders that work directly with the data - in some cases filtering events to those that are in the new 'data' style, ie not just containing message field.#2021-03-1809:52rickmoynihanYeah that’s exactly what I was thinking. If I was starting again fresh I’d probably do that too, or if I needed to integrate something to datafy my logs. We have some custom datadog integrations that already essentially log data to datadog, however because we want to send data we currently do it outside of the logging system. If I were to do it again now I’d probably integrate it with this and implement it as an appender as you say; however it doesn’t feel like it’s worth the churn to change right now.#2021-03-1809:54henryw374:thumbsup:#2021-03-1810:00rickmoynihanIncidentally one feature that I don’t think you have are log4j2 ThreadContexts. They’re very useful. We have a macro in some of our projects that use those to for example assign every incoming http-request a unique id, and associate it with every (asynchronous) action related to that request. If you want I can open an issue and paste the code for you to mull over including.#2021-03-1810:04henryw374thanks yeah that's on my list. we have a similar macro that puts stuff in MDC context. so.. yes please to issue 🙂#2021-03-1810:10rickmoynihanah is there a good reason why you’ve chosen the Apache license over EPL?#2021-03-1810:12rickmoynihanThe original code was ported from a library @U050CTFRT wrote. It was dual licensed under EPL 1 or AGPL 3. Most clojure code tends to use EPL, as that’s the license clojure uses too. Apache/EPL may be compatible, I don’t know.#2021-03-1810:18rickmoynihanIf you change to EPL you’ll be able to just use it. I’ll not supply the code incase you want to do a clean room implementation (as there’s not a lot to it). Though if we ask malcolm nicely he might be willing to grant you a waiver. It’s only a 15 line macro though, so most implementations will be more or less the same. Alternatively I could describe the interface / usage. Up to you.#2021-03-1810:20henryw374hmm, yeah not my area of expertise I'm afraid. looking here, https://resources.whitesourcesoftware.com/blog-whitesource/top-10-eclipse-public-license-questions-answered it looks like they are not compatible - apache is more permissive. if you can post a gist for now with the license header that'd be ok? or, I'm supposed to be meeting Malcolm later so I can ask him. he uses MIT for all new stuff, which afaik is even more permissive than apache#2021-03-1810:22rickmoynihanYeah MIT is pretty unencumbered, so you’d be ok in that case. I suspect malcolm will be happy to grant it, and just have the code used, but it’s totally his choice.#2021-03-1810:23rickmoynihanOf course if you don’t care strongly about the license you could also just move to EPL, MIT or public domain.#2021-03-1810:23rickmoynihanbut it’ll probably only take you 10/20 mins to implement the macro yourself 🙂#2021-03-1810:26henryw374I find it hard to say no to at least looking at working code. :) MIT wouldn't work, as that is less compatible. I'll ask him and ping you back thanks#2021-03-1810:29rickmoynihanYes sorry MIT definitely won’t work for you using this code.#2021-03-1810:30rickmoynihanunless malcolm were to explicitly grant permission to you under the license you choose.#2021-03-1810:31rickmoynihanhttps://gist.github.com/RickMoynihan/8714a86f7f1f30b22136597305e50ca4#2021-03-1810:31henryw374cheers#2021-03-1810:31rickmoynihanhttps://github.com/henryw374/clojure.log4j2/issues/1#2021-03-1815:14chrisnHere is a simple video encoding library for Clojure: https://github.com/cnuernber/avclj I wrote this as an example of how simple interfacing with C systems can be and to show how nice using the deps.edn pathway is for a clojure library. It sits directly on top of the libavcodec series of shared libraries used by ffmpeg - it loads them dynamically and then you pass frames directly to the library. I have included a simple example of using Skija to render to a native buffer that is then passed directly into the encode-frame! method. Use this if you have a need to render videos of your crazy Clojure pixel art 🙂.#2021-03-1818:37phronmophobicThis is really neat! Would it be possible to make a simple video player using avclj?#2021-03-1819:15chrisnYes it would be possible. The decode pathways in my opinion are much harder than the encode pathways but all the necessary pieces are there. I could provide a function that gives you a sequence of close-able buffer objects or something that had each frame's information such as the image, the microsecond time and duration. The waters are fairly deep with FFmpeg; the encoder took a lot of head scratching before it produced videos that worked on cellphones.#2021-03-1820:28phronmophobicFFmpeg is such a useful library, it's something I've been meaning to dive into myself. I'm familiar with jna and it would probably be good for me to also learn from how you've been using jna based off your excellent work with libpython-clj. I'll check it out and see how it goes.#2021-03-1820:30phronmophobicwow, I did not know about this trick, https://github.com/cnuernber/avclj/blob/master/cpptest/compile64.sh#L1 Very cool. I've been using python-clang to try to get struct info.#2021-03-1820:42phronmophobic🤯 , this stuff is awesome, https://cnuernber.github.io/dtype-next/tech.v3.datatype.ffi.html. Is the ffi stuff graalvm compatible?#2021-03-1822:03chrisnNot at this time. I am working on it right now. It is JNA and JDK-16 compatible.#2021-03-1822:05phronmophobicWell, either way, there's some really great c interop code here and I look forward to simplifying some of my c interop code in the future. Thanks! :thumbsup:#2021-03-1822:10chrisnYou are so welcome! I will post of course when I get a graal native pathway working. The target is some clojure code along with some python stuff all wrapped up into a graal native shared library that is then loaded via cython.#2021-03-1822:17phronmophobicEventually, I'd like to be able to spit out apps a shared library that can be loaded and ran on mobile using a prebuilt iOS/android app#2021-03-1815:18Adam HelinsDear friends, a new much improved version of BinF, a Clojure/script library for handling any kind of binary formats /protocols in a simple yet powerful way. I've used it with great success for things like MIDI processing and a WebAssembly decompiler. I find it really capable, flexible, and feature-rich. It provides probably more than you need. Hope it will sprout new super use cases: https://github.com/helins/binf.cljc#2021-03-1818:25cassielNice. I have a Node-hosted sysex librarian to finish. This could well be useful.#2021-03-1818:33dcjThis looks great! I also nominate your READMEs description of your support for 64-bit integers for the "README Hall of Fame":
It is not the most beautiful experience one will encounter in the course of a lifetime but it works and does the job pretty efficiently.
#2021-03-1822:57Adam HelinsThen I shall accept the honor!#2021-03-1910:28cassielThe award will, of course, be in binary.#2021-03-1819:20Alex Miller (Clojure team)After a slight delay, https://clojure.org/releases/devchangelog#v1.11.0-alpha1 is now available! • https://clojure.atlassian.net/browse/CLJ-2603 Clojure keyword argument functions now also accept a map, see https://clojure.org/news/2021/03/18/apis-serving-people-and-programs #2021-03-1819:28seancorfield
user=> (let [[& {:keys [a b] :as opts}] [{:a 1 :b 2}]] [a b opts])
[1 2 {:a 1, :b 2}]
user=> (let [[& {:keys [a b] :as opts}] [:a 1 :b 2]] [a b opts])
[1 2 {:a 1, :b 2}]
#2021-03-1819:29seancorfieldCompared to 1.10.3:
Clojure 1.10.3
user=> (let [[& {:keys [a b] :as opts}] [{:a 1 :b 2}]] [a b opts])
Execution error (IllegalArgumentException) at user/eval140 (REPL:1).
No value supplied for key: {:a 1, :b 2}
user=> (let [[& {:keys [a b] :as opts}] [:a 1 :b 2]] [a b opts])
[1 2 {:b 2, :a 1}]
#2021-03-1819:29seancorfieldSo, no, it changes destructuring “everywhere”.#2021-03-1819:30seancorfield@U050CT4HR You’re trying to destructuring a sequence as a map — the change in 1.11 is the other way round, effectively, destructuring a map as a sequence of named arguments.#2021-03-1819:31seancorfieldI will update us to 1.11 Alpha 1 at work and see if it breaks anything!#2021-03-1819:52Alex Miller (Clojure team)I should also mention that the destructuring docs have also been updated (they actually never had been updated to include keyword argument support and there were no published semantics about that anywhere). Also, the doc has been extended to cover this new 1.11 capability https://clojure.org/reference/special_forms#keyword-arguments#2021-03-1820:51hlshipThis seems like a clever little change though to be honest I don't like the kw-args approach, I'm always happy enough to just use an optional map parameter on my functions. A lot of confusion to save two characters. It's feels like a rare example of Clojure doing something "to be cool looking" (the kw args in the first place, not this new change).#2021-03-1820:52hlshipAlso, I think the example in the release notes would be slightly more useful if it showed a mix of kw args and a map.#2021-03-1822:48vemvIs there a performance difference between using the new & and no & at all? (i.e. a vanilla, fixed map arg)#2021-03-1906:15Alex Miller (Clojure team)well you're comparing doing work and not doing work, and usually doing work has some cost, so yes#2021-03-1906:19Alex Miller (Clojure team)although kwarg destructuring in general is significantly faster than it was due to the other changes in the patch#2021-03-1906:25Alex Miller (Clojure team)given something like (defn foo [& {:as m}] (count m)) , running (time (dotimes [_ 500000] (foo :a 1 :b 2))) a few times shows best case around 70 ms on 1.10.3 and 14 ms on 1.11.0-alpha1. vs (defn foo-m [m] (count m)) and (time (dotimes [_ 500000] (foo-m {:a 1 :b 2}))) of around 7.5 ms.#2021-03-1906:31Alex Miller (Clojure team)there's a lot of "it depends" in those numbers, but might give you some idea#2021-03-1908:05vemvThanks, that's useful! I asked partly because I was under the impression that for the following programmer intent:
(defn foo [& {:keys [a b c]}])
...one could emit internally two arities. In Clojure pseudocode:
(defn foo
  ([m])
  ([k v & kvs]))
The point being, if you invoke the arity 1 (by using {} caller-side instead of kwargs), you'd get the best possible performance. Which would seem a sweet spot: one can opt to consume defns in a more performant way, while keeping full flexibility.
#2021-03-1908:06Alex Miller (Clojure team)yes, that was one of many options we considered#2021-03-1907:56slipsetI’m very honoured to announce the release of https://github.com/clojure/data.json/releases/tag/data.json-2.0.0 . Thanks to @alexmiller for inspiration and guidance during this work! This release introduces significant speed improvements in both reading and writing json, while still being a pure clojure lib with no external dependencies. Using the benchmark data from jsonista we see the following improvement: Reading: • 10b from 1.4 µs to 609 ns (cheshire 995 ns) • 100b from 4.6 µs to 2.4 µs (cheshire 1.9 µs) • 1k from 26.2 µs to 13.3 µs (cheshire 10.2 µs) • 10k from 292.6 µs to 157.3 µs (cheshire 93.1 µs) • 100k from 2.8 ms to 1.5 ms (cheshire 918.2 µs) Writing • 10b from 2.3 µs to 590 ns (cheshire 1.0 µs) • 100b from 7.3 µs to 2.7 µs (cheshire 2.5 µs) • 1k from 41.3 µs to 14.3 µs (cheshire 9.4 µs) • 10k from 508 µs to 161 µs (cheshire 105.3 µs) • 100k from 4.4 ms to 1.5 ms (cheshire 1.17 ms)#2021-03-1908:10borkdude@U04V5VAUN are you sure this is correct? > 10k from 508 µs to 161 µs (cheshire 105.3 ms)#2021-03-1908:11borkdude161 µs vs 105.3 /ms/ ?#2021-03-1908:11slipsetno#2021-03-1908:12slipsetFixed#2021-03-1908:17ikitommiGreat work! Will rerun the benchmarks on jsonista repo with the new version#2021-03-1908:18borkdudeFWIW there are also some new patches in cheshire master (with new Jackson) so it would be good to run against cheshire master and not the currently released version#2021-03-1908:18slipsetjsonista is still faster though 🙂#2021-03-1908:18borkdudee.g. writing became 15% faster#2021-03-1908:27ikitommirunning with the latests now.#2021-03-1908:48nilernMost people will be using the latest jar though#2021-03-1909:40jmayaalvthis is great! 😍#2021-03-1909:46rickmoynihan@U04V5VAUN fantastic! Care to elaborate on the tricks you used to speed it up?#2021-03-1910:03slipset1. remove the dynamic vars and pass them explicitly as an options map 2. for reading, split reading strings into two paths, the quick one (without any escapes), you do with passing an array slice to (String.), the slow one (with escapes and unicode and stuff) you still do with Stringbuilder 3. for writing, don’t use format to construct unicode escapes The main trick though was to use the stuff in http://clojure-goes-fast.com ie, profile, observe the results, form a hypothesis, create a fix 🙂#2021-03-1910:11rickmoynihanYeah I’d taken a quick peak, and was mainly interested in hearing about 2 and 3. I entirely agree with the other advice too though! :thumbsup: :thumbsup: I’ve noticed in the past that unicode processing is often the slow bit in parsing large amounts of data. Also the performance difference between InputStream and Reader is staggering… mainly I believe because reader does that unicode stuff, and expands all characters into 16bits. So was curious how you were alleviating that. I’ve never tried parsing json, so know next to nothing about it; but I was trying to understand how you knew whether you needed to use unicode or not. I’m guessing you know you only need to handle unicode for strings inside the json?!, not the structure itself. Is that correct?!#2021-03-1910:27roklenarcicI was looking at the commit that replaced dynamic vars with options map. Couldn’t you have saved up even more time if internal functions like read-object received key-fn and value-fn as an argument instead of the whole options map and performing a map get?#2021-03-1910:28nilerndata.json takes a Reader, I think @U04V5VAUN just meant Unicode escapes inside strings#2021-03-1910:30borkdudeavoiding apply and merge could possibly also help#2021-03-1910:30roklenarcicAnother observation: couldn’t you capture the values of dynamic vars in a map at the start of the public functions like write-str and then you don’t get hit with dynamic var cost because you don’t access it repeatedly#2021-03-1910:31rickmoynihan@U4MB6UKDL: Yes I know. I was alluding to that too. I mention InputStream/Reader as something observed in my own work, and in support of the general point that handling unicode is slow.#2021-03-1910:31ikitommithe old:
jsonista.jmh/encode-data-json  :encode  :throughput  5         406998.934   ops/s  152242.102    {:size "10b"}
jsonista.jmh/encode-data-json  :encode  :throughput  5         146750.626   ops/s  13532.113     {:size "100b"}
jsonista.jmh/encode-data-json  :encode  :throughput  5         28543.913    ops/s  5982.429      {:size "1k"}
jsonista.jmh/encode-data-json  :encode  :throughput  5         1994.604     ops/s  193.798       {:size "10k"}
jsonista.jmh/encode-data-json  :encode  :throughput  5         229.534      ops/s  3.574         {:size "100k"}
#2021-03-1910:31ikitommithe new:
jsonista.jmh/encode-data-json  :encode  :throughput  5         1534830.890  ops/s  155359.246    {:size "10b"}
jsonista.jmh/encode-data-json  :encode  :throughput  5         341613.782   ops/s  26261.051     {:size "100b"}
jsonista.jmh/encode-data-json  :encode  :throughput  5         69673.326    ops/s  1647.625      {:size "1k"}
jsonista.jmh/encode-data-json  :encode  :throughput  5         5658.247     ops/s  999.701       {:size "10k"}
jsonista.jmh/encode-data-json  :encode  :throughput  5         581.924      ops/s  39.758        {:size "100k"}
#2021-03-1910:31ikitommi=> 2.5x throughtput improvement 🚀#2021-03-1910:31ikitommijsonista:
jsonista.jmh/encode-jsonista   :encode  :throughput  5         6718559.441  ops/s  564494.417    {:size "10b"}
jsonista.jmh/encode-jsonista   :encode  :throughput  5         2021530.135  ops/s  227934.280    {:size "100b"}
jsonista.jmh/encode-jsonista   :encode  :throughput  5         358639.582   ops/s  33561.700     {:size "1k"}
jsonista.jmh/encode-jsonista   :encode  :throughput  5         32536.978    ops/s  8135.004      {:size "10k"}
jsonista.jmh/encode-jsonista   :encode  :throughput  5         2687.242     ops/s  185.516       {:size "100k"}
#2021-03-1910:32ikitommistill much faster, but it’s 99% java.#2021-03-1910:33nilernJackson (and simdjson) can do their own UTF-8 decoding while parsing from a byte stream. All the structural JSON characters are ASCII so yes Unicode is only really relevant inside strings.#2021-03-1910:34slipset@U4MB6UKDL my initial patch had value-fn and key-fn passed as separate params, but that doesn’t really scale well (if you imagine passing more opts in the future). Also, the penalty from apply and array-map only shows on the smaller payloads, so it was probably worth the tradeoff.#2021-03-1910:35slipsethttps://clojure.atlassian.net/browse/DJSON-32#2021-03-1910:35nilern(I think you meant @U66G3SGP5)#2021-03-1910:36slipsetI most certainly did. Sorry.#2021-03-1910:39rickmoynihanhas some slack weirdness happened in this thread?! Some comments appear to have disappeared and replies now appear out of context e.g. my comment above was in response to something @U4MB6UKDL said which has also vanished.#2021-03-1910:46nilernNothing has vanished AFAICT. Try refreshing your browser?#2021-03-1910:47rickmoynihan:thumbsup: I’d done that, but doing it a second time seems to have fixed it.#2021-03-1912:21ikitomminew jmh-benchmarks on jsonista repo: https://github.com/metosin/jsonista#performance#2021-03-1913:41Ben Slessvery cool! Looks like some more % can be shaved off by using identical? and == instead of = where possible. Especially using identical?, as the documentation says "If value-fn returns itself" - can you assume it's the same object?#2021-03-1914:39Alex Miller (Clojure team)an excellent way to work on problems is to write them down in a trackable place like https://ask.clojure.org or jira (if you have access)#2021-03-1914:40Alex Miller (Clojure team)Changelog for 2.0.0 fyi: • Perf https://clojure.atlassian.net/browse/DJSON-35: Replace PrintWriter with more generic Appendable, reduce wrapping • Perf https://clojure.atlassian.net/browse/DJSON-34: More efficient writing for common path • Perf https://clojure.atlassian.net/browse/DJSON-32: Use option map instead of dynamic variables (affects read+write) • Perf https://clojure.atlassian.net/browse/DJSON-33: Improve speed of reading JSON strings • Fix https://clojure.atlassian.net/browse/DJSON-30: Fix bad test#2021-03-1914:55Ben Slessyou're right. I still need to open a jira on update-in's performance, too#2021-03-1912:16slipsetUnfortunately, there is a bug in the above release wrt to strings being longer than 64 chars, so do not use version 2.0.0, rather wait for 2.0.1 🥵#2021-03-1912:18otfromouch... solidarity and hugops#2021-03-1912:19borkdudeThe pure Clojure JSON ecosystem now rests on your shoulders slipset... take care!#2021-03-1912:26littlelistay strong! It's great effort. I personally would use pure library over java interop whenever possible.#2021-03-1912:37borkdudeBtw, I wondered if there is some JSON standard compliance test suit that these kinds of libs should be ran against#2021-03-1912:37borkdudeindependent of their implementation#2021-03-1912:46steffanPerhaps https://github.com/nst/JSONTestSuite#2021-03-1912:46borkdudeexcellent, I will post an issue at the cheshire side as well about this#2021-03-1913:23Noah Bogartas linked in that repo, i would highly recommend reading this blog post about json parsing ambiguities: http://seriot.ch/parsing_json.php#2021-03-1914:36Alex Miller (Clojure team)if anyone is interested in working on things like this, please join the club! would be happy to have help on this#2021-03-1914:38Alex Miller (Clojure team)data.json 2.0.1 is now available • Fix https://clojure.atlassian.net/browse/DJSON-37: Fix off-by-one error reading long strings, regression in 2.0.0#2021-03-1914:49borkdude@U04V5VAUN Congrats on the fix 😅 Does this affect the benchmarks?#2021-03-1914:51Alex Miller (Clojure team)doubt it#2021-03-1918:49chrisnI tested dtype-next's ffi generation with graal native and avclj. After a bit of work (a couple days) I can now generate a graal native executable that encodes video 🙂. https://github.com/cnuernber/avclj#2021-03-2013:35Adam HelinsSlight update to Void, a CLJC library for handling nil (especially with collections): https://github.com/helins/void.cljc#2021-03-2108:15Vincent Cantin
(= (void/assoc {:a 42}
                :a nil
                :b 42)
   {:a 42
    :b 42})
this is surprising, I would expect {:b 42} instead, in a way consistent with your update function.
#2021-03-2118:55metasoarousI had the same thought @U8MJBRSR5; Seems inconsistent with respect to whether nil clears out a k/v pair or just doesn't update.#2021-03-2214:17Vincent Cantincc @UCFG3SDFV#2021-03-2214:56Adam HelinsIndeed, assoc is a no-op in case of nil. What you describe is its sibling, assoc-strict, which does that :) I guess it should be better examplified in the README.#2021-03-2121:23borkdudeFriendly general reminder that there is also a #releases channel in which you can announce minor updates and bug fix releases.#2021-03-2123:51ericdalloHey all, it's been a while since last clojure-lsp clojure-lsp announcement, so here are the latest recent features added: • New code actions 🎉 Thread first/last all, Create private function , Resolve macro as... • New custom linter: New custom linter: unused-public-var • Support for Signature help • We have a new way to install clojure-lsp via https://github.com/clojure-lsp/homebrew-brew that is updated automatically! catjam (kudos @andre.peric) • completion improvement fixing a lot of issues For more information, reach us on #lsp clojure-lsp#2021-03-2200:31wilkerlucioHello, Pathom Viz 2021.03.21 just got out! This release adds the ability to view the plan snapshots from your queries. In Pathom 3 there is the planner, who builds up the execution graph. Before this version you could see the graph nodes from a ready plan. With this update you can also see a step by step process of how the plan itself was built. This is useful to debug all sorts of planning errors, as you can see closely how Pathom does it. To try this feature, remember to use the latest pathom-viz-connector, and also the latest Pathom (and of course, the latest pathom-viz). https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.3.21#2021-03-2314:22bruno.bonacciJust released µ/log-v0.7.1 - "μ/log (Pronounced: /mjuːlog/) is a micro-logging library that logs events and data, not words!" https://github.com/BrunoBonacci/mulog • [NEW] Added https://cljdoc.org/d/com.brunobonacci/mulog/0.7.1/doc/samplers/jmx-mbean-metrics-sampling to capture/sample the value of MBeans. • [NEW] Added https://cljdoc.org/d/com.brunobonacci/mulog/0.7.1/doc/samplers/kafka-metrics-sampling to sample metrics from Kafka apps • Added support for GraalVM native compilation#2021-03-2314:28ericdalloAnnouncing deps-bin 🎉 - Generate a executable embedded jar from a jar file via clojure cli. It's a simpler port from lein-binplus to deps.edn https://github.com/ericdallo/deps-bin#2021-03-2401:46danielcomptonClojurists Together wants to hear from you on what we could be doing differently. We're running a public survey for OSS Clojure devs to hear more about what you need and how we can serve you better. Check it out! clojurists-together https://www.clojuriststogether.org/news/listening-to-maintainers-for-the-next-phase-of-clojurists-together/#2021-03-2401:51ericdalloCool! I'm receiving a permission error on the public survey though 😅#2021-03-2401:54danielcomptonOops, thanks! I've fixed that now#2021-03-2409:59Adam HelinsRefreshed version of this I2C library for your IOT projects ; talking to sensors and such from Clojure JVM : https://github.com/helins/linux.i2c.clj Also "sub-libraries" targetting specific devices such as the BME280 sensor (see README) 😉#2021-03-2411:31chrisnI remember years of building linux kernels and adding in the I2C-bit banging module 🙂. Really cool to see some low-level love here 🙂.#2021-03-2412:15Adam HelinsYes, with Clojure spreading around, I hope to see more works like that. Those libs are not new but it's true they are a bit expert-friendly, also because the JVM wasn't making things easy when it came to talking to the OS, using native code, etc#2021-03-2412:17chrisnNo kidding. Great direction 🙂.#2021-03-2411:35chrisnWe have a new blog post talking specifically about the FFI architecture in dtype-next. Write some code that accesses C libraries and runs across JDK-8 with JNA, JDK-16 with JEP-191, and the Graal Native. This is the architecture behind clj-python and my example avclj library. https://techascent.com/blog/next-gen-native.html#2021-03-2412:28Adam HelinsI believe this is actually very important work. Historically, it has been hard to leverage native tooling but the few examples we have are, in my opinion, authentic success stories (eg. Neandertal). With BinF, I did some work on having "C-like ABI" tooling as well. It is essentially about describing composite types as EDN, although it was not the primary goal. A small example: https://github.com/helins/binf.cljc/blob/main/src/example/helins/binf/example/cabi.cljc It is not a complete solution such as what you show, it's more about having very basic building blocks so that many things can me implemented on top. I mention all that because I focused on being CLJS friendly as I believe strongly in WebAssembly. Imagine using native libraries/utils both from Clojure JVM and CLJS browser exactly in the same way. It would definitely be a killer feature. Goal-wise, BinF and Dtype seem to be different. Binf is rather "protocol-oriented" while Dtype is rather "math/performance" oriented. But when it comes to that ABI stuff, maybe there is some synergy to be found, especially when it comes to targetting WASM.#2021-03-2412:33martinklepsch@UDRJMEFSN random feedback for that blog site: make the icon link to the homepage please 🙂#2021-03-2413:01chrisn@U050TNB9F - Great feedback 🙂. Will do! @UCFG3SDFV - I have thought about extending dtype to the browser and there was ages ago some level of effort there but learning the intricacies of the JVM in order to compete with the spark ecosystem sort of made that go away. I am not sure the architecture would even work on the browser; it relies on very fast virtual calls in some situations which the browser's javascript engine often does extremely poorly. I agree with the insight that WASM is a unifying direction for both; I have thought before that the JVM should have first class support for WASM itself which it kind of does through GraalVM but I think it should be a JEP and part of the main codebase. There is definitely space in there for us to work together and talk about our directions as they are very similar in a lot of respects.#2021-03-2413:09chrisnIn avclj I have an example of using https://github.com/cnuernber/avclj/blob/master/src/avclj/av_context.clj and using those to create struct definitions that are very similar to your binf work.#2021-03-2413:55Adam HelinsDefinitely some overlapping, nice example! Funny how things converge, a few days ago I was messing ffmpeg (decompiling ffmpeg-wasm with a lib I'll release "soon"). It is a very good target for testing/developing that kind of tooling. Is there a "lower-level" facility for describing those layouts besides text? One of the reason I preferred working with fns and EDN right away, abstracting primitive types, was to be more language agnostic (eg. being more friendly towards Rust). Another argument towards trying to be more agnostic/programmatic for describing composite types, when it comes to WASM, is interface types. I am not sure yet but I believe it could be possible to "easily" decompile a lib such as ffmpeg-wasm and automatically generate such struct descriptions in some situations.#2021-03-2413:58chrisnYes for sure - https://cnuernber.github.io/dtype-next/tech.v3.datatype.struct.html#2021-03-2413:59chrisnActually the documentation for that namespace is lacking. The clang namespace uses the low-level api: https://cnuernber.github.io/dtype-next/tech.v3.datatype.ffi.clang.html#2021-03-2413:35Adam HelinsToday seems to be "native tooling day". Here is another refresh, a GPIO (General-Purpose Input Output) library for your IOT projects: https://github.com/helins/linux.gpio.clj Eg. Handling pins on a Raspberry Pi from Clojure JVM (I had to migrate some underlying Java libs from Bintray, I took some time to "modernize" those libs)#2021-03-2422:57cheppreyI wanted to check the cljdoc link but it returns an error: An exception occurred, sorry about that!#2021-03-2422:59cheppreyI'm just curious if the new api lets you set the pulldown resistor on an input. My clojure rpi project just used sysfs gpio for everything, but I had to get wiringpi installed and initialize the pulldowns manually when the pi boots up.#2021-03-2422:59cheppreyNew library looks cool btw. Thanks!#2021-03-2507:53Adam Helins@UHL84CDTP Thanks, updated second Cljdoc link which was indeed faulty Pullup/down depends on the Linux API. This library is based on version 1 of that API. I know there was/is a version 2 in progress which, I believe, add explicit support for that, but I don't think it's out yet.#2021-03-2415:07Lucy WangJust added https://lucywang000.github.io/clj-statecharts/docs/parallel-states/ (a.k.a concurrent states) support to https://github.com/lucywang000/clj-statecharts, the State Machine and StateCharts for Clojure(Script). The value proposition of Parallel States becomes more and more prominent when the applications UI gets more complex. What's more, this is a major rewrite of the internals (used a lot of the reference algorithm in the https://www.w3.org/TR/scxml/#AlgorithmforSCXMLInterpretation instead of my own one, because the latter is awkward to implement parallel states feature. All the https://github.com/lucywang000/clj-statecharts/blob/master/test/statecharts/impl_test.cljc still pass, even the core impl code has more than 50% changed! I have not cut a release yet, so the version number is still 0.0.1-SNAPSHOT. Don't be scared by that, though, because I have been using it in commodity futures trading for almost half a year now 🙂#2021-03-2423:35eccentric JCongrats! Contemplated writing a cljs adaptation myself after a friend shared xstate with me but you beat me to it. Looks solid too, excited to give it a shot. 🏆#2021-03-2500:53Lucy WangYeah I thought of that way too, xstate is just fabulous. But I believe statecharts could be more widely used in both clj & cljs so I decided to roll my own. Still lots of the API design is borrowed from or inspired by xstate.#2021-03-2502:55Lucy WangHere is an excellent article about making use of the parallel states features (and other features) of clj-statecharts: https://doughamil.github.io/gamedev/2021/03/24/statecharts-for-animation.html .#2021-03-2508:23simongrayHey Lucy, just wanted to say that I really like your introductory documentation @ https://statecharts.github.io/ - it’s great to have the trade-offs listed upfront. The README in the github repo says that it has first-class Re-frame integration. Would you lose something significant if you don’t want use Re-frame in the frontend then?#2021-03-2511:37Lucy Wang@U4P4NREBY the https://statecharts.github.io/ website is not my work 🙂 regarding re-frame integration, the core of clj-statecharts is pure function - the transition function, or a math formula
[actions, next-state] = f(current state, event)
The re-frame integration is just some higher level helpers on top of that. I use it in a few of my own projects and find it a good pattern, so I include it in the library hoping it could be useful for others too. You can safely ignore that module if you don't use re-frame or want to roll your own way.
#2021-03-2614:49jarrodctaylorBig enhancement to https://github.com/JarrodCTaylor/schema-cartographer Noteworthy points about the release: 1) Works with Datomic Cloud, On-Prem and Dev-Local. 2) Can generate a schema diagram for ANY existing Datomic database!#2021-03-2615:30viestihttps://github.com/viesti/timbre-json-appender now supports passing map as argument to logging call in version 0.2.0. Thanks @charliebriggs!#2021-03-2621:58bringeCalva's latest version, 2.0.182, uses the graalvm-compiled native binaries for clojure-lsp. You can now experience lower startup time, CPU usage, and memory usage of clojure-lsp when using Calva. calva ❤️ clojure-lsp Join us in #calva if you want to chat. simple_smile#2021-03-2712:29Adam HelinsDears friends, a novel and powerful CLJC library for interval trees: https://github.com/helins/interval.cljc From geometry to genomic analysis, many data science possibilities. These implementations are very flexible. I used them extensively for music analysis (detecting chords, analysing exactly how a musician plays, ...)#2021-03-2716:44Jakub Holý (HolyJak)Typo in the Readme : "Querying a point an interval map"#2021-03-2713:10Alex Miller (Clojure team)org.clojure/data.json release 2.0.2 • Fix https://clojure.atlassian.net/browse/DJSON-38: Type-hint return type of write-str • Fix https://clojure.atlassian.net/browse/DJSON-40: Make named argument passing compatible with new #2021-03-2800:12practicalli-johnpracticalli/spacemacs.d configuration has been updated with a minimal LSP configuration, providing a smooth integration between CIDER and some of the many possible LSP features and UI elements for Emacs. https://clojurians.slack.com/archives/C09C8GRLY/p1616890208038700#2021-03-2814:40LuFork, a non intrusive CLJS form lib. Some new interesting features in v2.4.0: • Any number of nested field arrays is supported -> https://github.com/luciodale/fork/blob/master/examples/fieldarray.cljs • Drag and Drop functionality to allow field array items to be re-ordered -> one liner `(drag-and-drop-handlers :key idx)` https://github.com/luciodale/fork#2021-03-2913:57chrisnhttps://github.com/techascent/tech.ml.dataset has some great new features and capabilities. How often have you seen a Clojure system that soundly beats C, Julia, Python, Spark, and R systems in a https://github.com/zero-one-group/geni-performance-benchmark? We have gone further down the https://techascent.github.io/tech.ml.dataset/tech.v3.dataset.reductions.html by adding statistical operations, called colloquially https://datasketches.apache.org/, that give you memory efficient and accurate probabilistic estimates for some statistical operations including algorithms such as https://techascent.github.io/tech.ml.dataset/tech.v3.dataset.reductions.apache-data-sketch.html#var-prob-set-cardinality and https://techascent.github.io/tech.ml.dataset/tech.v3.dataset.reductions.html#var-prob-quantile. So, if you want to process GB's of data in minutes or seconds on commodity hardware, check us out: https://github.com/techascent/tech.ml.dataset#2021-03-2914:23ordnungswidrigThis is great work. I used it on nextjournal to get my some graphs for the covid-19 pandemic for my local counties. I had to fiddle around a little but I think .dataset and nextjournal and vega are an awesome toolset. https://nextjournal.com/ordnungswidrig/covid-19-in-neu-ulm-experimental#2021-03-2914:28chrisnI had no idea! Thanks for letting me know 🙂#2021-03-2918:05Jakub Holý (HolyJak)Wow#2021-03-3120:01stathissiderisPlayed with http://tech.ml.dataset last week and I was really impressed. I showed it to the Python people in my org, they didn’t expect that sort of perf 😉#2021-04-0112:34otfromI've been really happy with the balance between speed and API sweetness for the stuff I've been doing. Elapsed time and memory is great compared to my transducer work#2021-04-0113:36chrisnThis feedback is really great and very encouraging. The API sweetness mostly all @U1EP3BZ3Q.#2021-04-0113:39genmeblogThank you. We've put a lot of effort to make it happen.#2021-03-3102:26mikethompsonAnnouncing a shadow-cljs "build hook" to automatically inject the ambient git version into your production app. https://github.com/day8/shadow-git-inject#2021-03-3123:19AzzuriteIf you use server side rendering (and want to display that version) then you'd probably need to write your own implementation of getting that value, right? or could you use that library in your clj code?#2021-03-3123:43mikethompsonYeah, this library is targeted at shadow-cljs and the clients, not servers. Depending on your server side build chain, you might be able to use our sibling library for Lein which does the same thing: https://github.com/day8/lein-git-inject#2021-04-0110:22John McNicholasComing up later this month is the https://bit.ly/2NTZG8F, where you can hear the latest research & advancements from experts at Facebook, DeepMind, McDonald's, Amazon, Nestlé, Deepgram, Cisco, OpenText & more! 💬 Topics covered include: • Toward Lifelong Conversational AI • NLU & Computer Vision • Generic ASR Will Never be Accurate Enough for Conversational AI • Extracting Conversation Highlights Using Dialog Acts • Cross-Lingual Transfer Learning 📌 View the agenda in full: https://bit.ly/2NTZG8F ➡️ Book your discounted ticket here: https://bit.ly/2NTZG8F#2021-04-0110:30borkdudeThis probably belongs in #events, not here#2021-04-0111:10ghadiIt probably doesn't belong in this slack at all#2021-04-0112:05martinklepschdeleting#2021-04-0113:29mkvlrhttps://github.com/nextjournal/beholder is the directory watcher from https://github.com/vouch-opensource/krell as a small standalone library. As a good Clojure library, it’s hatching from its 🥚 at v1.0.0 today, with the hope of it never needing to change again. 🤞 It’s built on top of https://github.com/gmethvin/directory-watcher to fix the still unsatisfactory performance of the JDKs built-in file watcher on macOS. Thanks @dnolen for the initial development and the kind permission to extract it. 🙏#2021-04-0113:31cassielIn the README: should (beholder/stop watcher) be (beholder/stop beholder)?#2021-04-0113:33mkvlrugh, yes! there comes the first change 🙈#2021-04-0113:33mkvlrbut only to the readme hopefully#2021-04-0113:34mkvlr@U6BUSDFMX thank you, fixed https://github.com/nextjournal/beholder#usage#2021-04-0113:35cassielI should have pull-requested it, I suppose…#2021-04-0113:37cassielAnd… probably a stupid question (or one I should test). When you have a watcher running, does it prevent JVM exit?#2021-04-0114:10mkvlrit should not
#2021-04-0114:26athomasoriginalVery cool! Does Krell now use this library as well? (I know I could answer this Q by checking, but just felt like asking)#2021-04-0114:34mkvlr@U6GNVEWQG not today, still using https://github.com/vouch-opensource/krell/blob/master/src/krell/watcher.clj#2021-04-0119:15vemvthe https://github.com/jonase/eastwood/blob/master/changes.md#changes-from-0314-to-040 linter has a new release! we've given it a push, fixing a number of years-long bugs. Importantly, a new `:ignored-faults` option is offered, allowing you to ignore specific instances of faults on a per-file/per-line basis. This eases the possibility of using Eastwood as a hard CI check. Followup in #eastwood - stay tuned for further fixes :)#2021-04-0514:52Karol Wójcik@U45T93RA6 how do you generate those changelog entries?#2021-04-0516:59vemvI did by hand :)#2021-04-0517:10vemvI think https://github.com/clojure-emacs/cider/blob/master/CHANGELOG.md was an inspiration#2021-04-0517:38Karol Wójcik@U45T93RA6 Huh. Will try to rigor myself to do the same. 😄 Thanks!#2021-04-0306:28seancorfieldcom.github.seancorfield/clj-new {:mvn/version "1.1.293"}https://github.com/seancorfield/clj-new — The main new addition is the polylith template to create a new Polylith workspace with some minimal, working code. Follow-up in #clj-new #polylith or #tools-deps as appropriate!#2021-04-0513:57mauricio.szaboOk, after a long break, I just published new versions for both Chlorine and Clover, the socket-REPL package for Atom and VSCode. In this version, notable changes are some fixes for nREPL and Shadow-CLJS, and now both editors can detect ports if there's a .socket-repl-port on the root of the project. It'll also detect if there's an nREPL port, but it's behind a config toggle (because Chlorine/Clover works better with pure socket REPLs, so I don't want to "default to worse experience" really). Discussions on #chlorine-clover.#2021-04-0517:26Adam HelinsDear friends, something brand new for our ecosystem: a fully spec compliant WebAssembly compiler and decompiler, entirely in CLJC https://github.com/helins/wasm.cljc I hope it will sprout new crazy projects. It certainly could give to Clojurescript an interesting edge over JS. Who knows, maybe it will be used one day to bootstrap Clojure-WASM? Furthermore, the whole WASM representation is defined using Malli schemas! Kudos to the Malli team for such a fine library, and special thanks to @ikitommi who was very prompt to add a couple needed features. (PS: This is obviously very new and still alpha, but it is already pretty well tested and it works 🙂 )#2021-04-0518:36metasoarousThis is SO COOL! Thanks for working on this!#2021-04-0521:04respatializedA comment I saw a while back on LtU comes to mind: > Language stacks inevitably have abstraction leaks. The lower level language leaks into the higher level one, whether by explicit embedding or various design assumptions. > > ...An intriguing alternative is to invert the stack. > > Start with a conventionally high-level language that has many nice properties except performance - composition, concurrency, reflection, automatic memory management, natural numbers with bignum arithmetic, caching, optimizing, etc. > > ...Such a language stack supports appropriate levels of abstraction/performance, but upon a more robust foundation. http://lambda-the-ultimate.org/node/5590#comment-96320 it really seems like your work here demonstrates the viability of Clojure and malli as a sufficiently expressive combination to fill this particular niche. very cool stuff.#2021-04-0612:53Adam Helins@UFTRLDZEW Indeed, I feel right at home with those posts. And a bit later: "in order to invert the language stack, you need to separate the conceptual stack from the implementation stack, because with the latter we obviously have to have the low-level stuff at the bottom" This is why I got a bit obsessed with WASM. It is an abstract language for an abstract machine, yet its execution (runtimes) is low-level. It is a unique opportunity for going as low as possible while caring for a single and unique target. Because we have that single target, it makes sense to build high-level tooling, we are building on a single foundation. Hopefully, that makes sense!#2021-04-0617:45Jakub Holý (HolyJak)You are on an incredible roll, @UCFG3SDFV! It almost looks like you have been borkdude-ified :-) Great work!#2021-04-0710:11Adam Helins@U0522TWDA Being borkdude-ified, genuinely an honour 😄 Yes, all this was stuff that was laying in the dark, I took some time to clean those projects and make public. Almost done, but not yet!#2021-04-0712:54ikitommiCongrats on the release! Linked the lib from malli README. Looking forward on the future of clj & wasm#2021-04-0518:46Karol WójcikNew version of holy-lambda 0.1.2. A micro framework for targeting both java/native AWS Lambda runtime using one code 🙂 Changelog: https://github.com/FieryCod/holy-lambda/blob/master/CHANGELOG.md Repo: https://github.com/FieryCod/holy-lambda Some examples: https://github.com/FieryCod/holy-lambda/blob/master/examples/hello-lambda/src/hello_lambda/core.clj A real example: https://github.com/ekoontz/nlquiz Incoming this month: support for interceptors and GraalVM-EE All contributions welcome. #2021-04-0618:00Jakub Holý (HolyJak)FYI Cljdoc import has failed, says https://cljdoc.org/d/fierycod/holy-lambda/0.1.2/doc/1-01-installation#2021-04-0618:50Karol WójcikThanks @U0522TWDA I’m aware, but still there is nothing useful in docs :(. @U017Y2J9F0W will probably change the docs state by adding “getting started” guide. #2021-04-0521:23Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.822 is now available • Fix issue with git deps where new commits on branches were not fetched. ◦ Note: if you are having this issue, you should delete your ~/.gitlibs directory in addition to upgrading#2021-04-0614:57Alex Miller (Clojure team)At long last, the State of Clojure 2021 results are available ... https://clojure.org/news/2021/04/06/state-of-clojure-2021#2021-04-0615:41agile_geekInteresting to know if the increase in org size is correlated directly to use in financial services as I expect those to be the larger orgs who throw more developers at a project. I’m not entirely sure that is a good thing.#2021-04-0615:54Ben SlessIs there a way to access the raw results?#2021-04-0616:49simongray@UK0810AQ2 at the bottom of the page#2021-04-0616:51Ben Sless@U4P4NREBY those are the full results, not the raw results. A CSV would be nice#2021-04-0617:07Alex Miller (Clojure team)if you have need of something specific, dm and I can probably drop it out for you. I do not want to drop out anything that has full individual responses as they can be pretty de-anonymizing in combination#2021-04-0617:34seancorfieldInteresting to see the programming career length is split 50/50 between folks programming <10 years and >10 years (with a long tail out to 25+).#2021-04-0617:35seancorfield@U064X3EF3 Is there a channel where you’d prefer follow-up discussion happen about the survey results?#2021-04-0618:19Alex Miller (Clojure team)#clojure I guess?#2021-04-0618:22hlshipI'd have liked to see the charts showing the last three years or so, so that we could see the actual changes. The text might say "Clojure has seen large grownthin large companies" but a time series bar chart could actually show it to us.#2021-04-0618:24oliy26% of (clojurescript users?) don't have any tests!#2021-04-0618:28Alex Miller (Clojure team)@U04VDKC4G prior results all linked at the end (not disagreeing, I don't have time to make that chart atm but the data is there)#2021-04-0619:18Ben SlessI'm not interested in the free text/individual responses at all. Just wanted to analyze some of the trends#2021-04-0621:12Alex Miller (Clojure team)org.clojure/data.json 2.1.0 is available • DJSON-39 - Add support for writing java.util.UUIDs (as strings) - thanks Erik Assum!#2021-04-0714:56Avi MehenwalClojureScript 1.10.844 is out! 🎉#2021-04-0715:02Noah Bogarthave a link for the change-log/announcement?#2021-04-0715:04jjttjjhttps://clojurescript.org/news/2021-04-06-release @UEENNMX0T#2021-04-0715:05Noah Bogartthank you!#2021-04-0809:04Ronny LøvtangenHold your horses if you are using Figwheel Main. I get lots of warnings at startup:
[Figwheel:WARNING] Compile Warning   resources/public/js/dev/figwheel/repl.cljc   line:52  column:17

  Wrong number of args (1) passed to goog.log/getLogger

  47  ;; goog.debug.Logger.Level.(SEVERE WARNING INFO CONFIG FINE FINER FINEST)
  48  ;;
  49  ;; set level (.setLevel logger )
  50  ;; disable   (.setCapturing log-console false)
  51  
  52  (defonce logger (glog/getLogger "Figwheel REPL"))
                      ^---
  53  
  54  (defn ^:export console-logging []
  55    (when-not (gobj/get goog.debug.Console "instance")
  56      (let [c (goog.debug.Console.)]
  57        ;; don't display time

[Figwheel:WARNING] Compile Warning   resources/public/js/dev/figwheel/repl.cljc   line:70  column:3

  Wrong number of args (3) passed to goog.log/log

  65      true))
  66  
  67  (defonce log-console (console-logging))
  68  
  69  (defn debug [msg]
  70    (glog/log logger goog.debug.Logger.Level.FINEST msg))
        ^---
  71  
  72  ;; TODO dev
  73  #_(.setLevel logger goog.debug.Logger.Level.FINEST)
  74  
  75  ;; --------------------------------------------------------------
#2021-04-0810:05Ronny LøvtangenThe release notes talks about these changes to the latest Closure Library#2021-04-1209:31Ronny LøvtangenFixed by figwheel-main 0.2.13, released yesterday.#2021-04-0815:53Sam RitchieSICMUtils 0.18.0 is out! As of today, the library can run everything from Sussman and Wisdom’s Functional Differential Geometry: http://xahlee.info/math/i/functional_geometry_2013_sussman_14322.pdf As a wild example that I don’t have my head around yet (thanks for the code, GJS!), here are Einstein’s field equations in Clojure: https://github.com/sicmutils/sicmutils/blob/master/test/sicmutils/fdg/einstein_test.cljc#L40 This is a big milestone toward a complete port of the original, massive scmutils library from Gerald Sussman. There are a couple of large pieces to go, mostly around making the simplifier smoking fast… but the end is in sight. Once the port is done I’ll turn full focus toward expanding the system’s ability to drive animations in the browser, and generate beautiful Vega charts during interactive investigations of these physical systems and calculus on manifolds. Here’s the CHANGELOG for the release: https://github.com/sicmutils/sicmutils/blob/master/CHANGELOG.md#0180 Come discuss in #sicmutils if any of this seems interesting!#2021-04-0816:18raspasovThis looks very impressive.#2021-04-0816:29Sam RitchieHappy to answer any questions or be a guide for the library; there really is a ton here. CLJDocs are having trouble building, but here’s at least a skeletal overview of some of the library: https://cljdoc.org/d/sicmutils/sicmutils/0.18.0/doc/introduction#2021-04-0817:13Setzer22For those using malli and missing spec's instrumentation, I wrote this small thing today (very early version!) 😄 I plan to continue improving it in the following weeks as I use it: https://github.com/setzer22/malli-instrument#2021-04-0820:13donyormReleasing an alpha version of Clem -- a project to make clojure exception messages easier to understand, using a tool which integrates with users' REPLs. It's especially targeted at beginners, but I could use feedback from more experienced developers as well. Gitlab: https://gitlab.com/unc-app-lab/clem-repl ClojureVerse write up: https://clojureverse.org/t/introducing-clem-the-clojure-error-mediator/7468#2021-04-0820:20Umur GedikDoes it also helps with the clojurescript stack traces?#2021-04-0820:22donyormNot working with ClojureScript yet, obviously somewhere we'd like to go, but the tooling is different so it will be a fairly substantial project#2021-04-0820:23Umur GedikI see thanks anyway ^^#2021-04-0820:40ghadi@U1C03090C you've created https://clojurians-log.clojureverse.org/clojure/2018-03-28/1522263598.000890#2021-04-0820:41ghadicool!#2021-04-0820:43donyorm@U050ECB92 Dang that's exactly what we did, down to https://clojurians-log.clojureverse.org/clojure/2018-03-28/1522264623.000274 describing the infrastructure. I don't believe the original creator of Clem was active on this slack when it started, but definitely great minds thinking a like there :)#2021-04-0905:30emVery cool stuff! Is there any reason why this needs to be an online hosted server, rather than a downloadable local database of error messages? I'd imagine it's just useful for now to community outsource types of exceptions/error patterns etc., but to actually have people use this tool in more serious environments it should probably be entirely offline.#2021-04-0918:17donyorm@UNRDXKBNY Thanks! And that would probably be very useful, but at the moment the database simply doesn't exist. Part of why I'm sharing this with the community is Clem not only provides messages on errors, but also adds them to the database so we know they exist. It'll need a bit of time to build up a useful database. It's simply a datomic database, so I imagine once we have a somewhat usable basis of errors we could allow downloading it. (You can also try running your own instance, though it's really only set up to do that for dev setups)#2021-04-0904:17wilkerlucioReleased [com.wsscode/tailwind-garden "v2021.04.09"] 🎉 , if you like Garden CSS and Tailwind, this has all the definitions and some variant helpers. https://github.com/wilkerlucio/tailwind-garden#2021-04-0904:30indyThank you for doing this service! I understand purge just uses a regex to remove unused classes. Do you have suggestions on what the regex will look like if you use purge?#2021-04-0904:34wilkerlucioif you are going to setup a CSS processing pipeline, its probably better to stick with the official Tailwind build, specially with their new JIT thing, which is awesome 🙂 the target audience of this garden versions is for people that don’t want to mess with more node things#2021-04-0904:35wilkerluciothat said, I think would be the same thing, that depends more on what you are using to write the HTML. If using hiccup for example, something like :div.text-sm.bg-gray-400 may not work by default, but if you use [:div {:class "text-sm bg-gray-400"} it probably works out of the box#2021-04-0904:38indyWow, I just saw the JIT thing, will have to check how that can be leveraged. What I'm missing in CLJS with tailwind is autocomplete and purge (since the raw size is huge). But I think your tailwind-garden will give me more ideas.#2021-04-0904:40wilkerluciothere is this example configuration for tailwind jit with shadow: https://github.com/jacekschae/shadow-cljs-tailwindcss#2021-04-0904:46indyThanks a lot, will check this one out 🙂#2021-04-0915:51fjolne@UMPJRJU9E purge works fine for me in CLJS, for both hiccup notations#2021-04-0915:53fjolnewith the default setup from tailwind docs; IIRC it’s only triggered on release build, so beware to check bundle size diff against that#2021-04-0906:19msolliAnnouncing https://github.com/msolli/proletarian, a durable job queuing and worker system for Clojure backed by PostgreSQL. It provides at least once processing guarantees with customizable retry strategies. Use Proletarian for asynchronously executing tasks in the background. It’s useful for offloading long-running tasks from the request thread in user-facing web applications. The initial public release is https://clojars.org/msolli/proletarian. It’s in alpha since public scrutiny and adoption might necessitate API changes, but I consider Proletarian mostly done and ready for production use. Please give it a spin! I’m happy to discuss and answer questions over at #proletarian. Repo: https://github.com/msolli/proletarian Simple example usage: https://cljdoc.org/d/msolli/proletarian/1.0.32-alpha/doc/example-a-the-basics#2021-04-0914:00lukaszLooks really cool! I made an attempt at something very similar a while back https://github.com/lukaszkorecki/taskmaster#2021-04-0915:22aviSuper cool! I was just looking for something like this a month ago… I ended up putting the project on hold so didn’t make a choice, but I was thinking of trying https://contribsys.com/faktory/ with https://github.com/apa512/clj-faktory. This is now bookmarked for next time I need something similar.#2021-04-0915:26avi@U06BEJGKD Kudos on the clear and comprehensive docs. Takes a lot of effort, and well worth it.#2021-04-0915:27aviAlso I like how it’s flexible enough to run the workers in the same VM as the rest of an app (e.g. a Web app/server) or in one or more discrete/dedicated VMs. Very nice!#2021-04-1007:57msolli@U69US348Z Thanks! Yeah, I’ve put some effort into the documentation. It really helps with the design process too, writing down how it’s supposed to work. Hope it can be helpful to you in the future!#2021-04-1213:56avi> It really helps with the design process too, writing down how it’s supposed to work. +1000000#2021-04-1413:47danielszCool name#2021-04-0914:47chrisnI have an example of using .dataset including reading/writing parquet with graal native.  I spent a bunch of time tracking down things that were making the build bigger/slower than necessary and reworked the parquet bindings so they would work with the latest parquet/hadoop ecosystem pieces.  The example parses a csv, does some calculations, and the saves/loads from parquet to make sure everything is good - https://github.com/cnuernber/ds-graal.#2021-04-0914:48chrisnI should also say there getting that much working with the a full spark system perhaps not possible due to the fact that about 40% of the hadoop system finds it necessary to use reflection approximately every 10 lines 🙂.#2021-04-0916:24quollAsami 2.0.0 has been released. Asami is a schema-less graph database for both Clojure and ClojureScript. Version 2.0.0 includes durable storage in Clojure. https://github.com/threatgrid/asami#2021-04-0916:36vlaaadLong ago, the four nations lived together in harmony...#2021-04-0916:39quollI think it’s interesting how we have different use cases. For instance, I wouldn’t use Asami for high speed small transactions (especially on disk!) but it’s good for querying#2021-04-0916:40quollAlso, being schema-less can be far more convenient (e.g. you can just load arbitrary JSON into it, and it automatically turns it into a graph). But this has implications for upsert#2021-04-0916:53quollI just have to wonder… which project is the Fire Nation?#2021-04-0919:10danielcomptonVoting has started for Clojurists Together board members! If you’re a member, you should have a ballot by now. If you don't, get in touch! clojurists-together https://www.clojuriststogether.org/news/announcing-board-nominations/#2021-04-0921:17Adam HelinsA peculiar hook for Shadow-CLJS: https://github.com/helins/coload.cljc It formalizes the act of "coloading". When working with CLJC files, this hook ensures they are loaded both as Clojurescript in your JS engine and Clojure on the JVM. Each such namespace exists in two universes, and both universes are kept in sync everytime something is changed. Why? Well, I'll release a novel CSS library soon which leverages this heavily 🙂#2021-04-1010:43Adam HelinsAnd when I work with complex CLJC, I often have problems with macros. They often need to output different code depending on the compilation target (Clojure? Clojurescript? Dev, release?) Reader conditionals cannot be applied to that problem, so here is my simple solution: https://github.com/helins/medium.cljc#2021-04-1011:14borkdudeNo mention of https://github.com/cgrand/macrovich in the README?#2021-04-1011:30Adam HelinsHmmm, not exactly the same goal but you are right, I'll add a small "prior work" section ;)#2021-04-1910:10Karol WójcikThat's awesome!#2021-04-1112:24pezHello Clojurains! Calva’s Getting Started with ClojureScript story just improved massively. With v2.0.187 this arrived: https://github.com/BetterThanTomorrow/calva/issues/1114, which makes the process to get an app with an editor connected ClojureScript REPL running a matter of: 1. Create the small directory structure that the ClojureScript Quick Start tells you to create 2. Jack-in Boom!#2021-04-1112:27pezThis was entirely doable before, but it had the user to first create a custom ClojureScript REPL setting in VS Code, which is not all that straight forward for most people, and also an odd requirement for the most vanilla ClojureScript REPL. 😃#2021-04-1112:30pezHere’s the change log for the last couple of weeks for your convenience: [2.0.187] - 2021-04-11 • https://github.com/BetterThanTomorrow/calva/issues/1114https://github.com/BetterThanTomorrow/calva/issues/1117 [2.0.186] - 2021-04-10 • https://github.com/BetterThanTomorrow/calva/issues/1023https://github.com/BetterThanTomorrow/calva/issues/1111https://github.com/BetterThanTomorrow/calva/issues/1112 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1105https://github.com/BetterThanTomorrow/calva/issues/1067 • Bump `clojure-lsp` to https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.04.07-16.34.10 • Bump `cider-nrepl` to https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#02510-2021-04-08 [2.0.185] - 2021-04-05 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1098 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1079 • Add experimental setting to: https://github.com/BetterThanTomorrow/calva/issues/650 • Bump `clojure-lsp` to `2021.04.03-18.43.55` [2.0.184] - 2021-04-02 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1086 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1060https://github.com/BetterThanTomorrow/calva/issues/1088 and bump to `2021.03.30-20.42.34` • https://github.com/BetterThanTomorrow/calva/issues/1091 [2.0.183] - 2021-03-30 • https://github.com/BetterThanTomorrow/calva/issues/978 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1083 [2.0.182] - 2021-03-26 • https://github.com/BetterThanTomorrow/calva/issues/1017 #2021-04-1217:56dangercoderAwesome!#2021-04-1113:23practicalli-johnpracticalli/clojure-deps-edn user wide configuration for Clojure CLI tools Add aliases for more REPL options, with nREPL server for the built-in terminal UI and nREPL client connections with simple and Rebel enhanced terminal UI. Separated REPL into REPL terminal UI, REPL with Editor and Remote REPL connection New aliases: • :repl/nrepl - Clojure REPL with nREPL server • :repl/cider - Clojure REPL with nREPL server and Cider-nrepl (code completion, pretty print, etc.) • :repl/cider-refactor - as above with clj-refactor • :repl/remote - simple terminal UI nREPL client for a remote REPL • :repl/rebel-remote - as above with Rebel Readline UI https://github.com/practicalli/clojure-deps-edn/#2021-04-1116:39seancorfieldYou have :repl/cider in there twice?#2021-04-1117:22practicalli-johnOoops, so I did. Fixed it to cider-refactor. Thanks.#2021-04-1206:36slipsethttps://github.com/clj-commons/pomegranate v 1.2.1 is released. This release contains a bump of the wagon libs from 3.3.2 -> 3.3.4#2021-04-1313:19ericdalloclojure-lsp Released new https://clojure-lsp.github.io/clojure-lsp/ version with support for 19 known snippets and custom user snippets during completion 🎉 For more information check #lsp#2021-04-1314:56Eric IhliJust released first/beta version of Tightly Packed Trie implementation as described in this paper: https://www.aclweb.org/anthology/W09-1505.pdf. https://github.com/eihli/clj-tightly-packed-trie https://clojars.org/com.owoga/tightly-packed-trie It results in compression of ~95% for a trie implemented with a traditional Clojure data structure like a hash-map. The entire tightly-packed data structure is a contiguous array of bytes as a java.nio.ByteBuffer. Address offsets in the ByteBuffer are stored as variable-length encoded integers, which saves a lot of space compared to typical 32 or 64 bit pointers.#2021-04-1315:08nilernNice! I have been thinking about something like this quite a few times lately but haven't actually needed to use one yet 😄#2021-04-1320:11Adam HelinsInteresting, and neat that you provide the paper. It always very instructive to take a "formal" description and compare it with an actual implementation.#2021-04-1320:12Adam HelinsPeople are often scared of papers just to realize that it is pretty straightforward in code.#2021-04-1321:17Eric IhliYeah some papers can be scary but this one was a great introduction. Straightforward, short, and no advanced math.#2021-04-1507:00djbluePortal, a data navigation / visualization / inspector tool for clojure, has a new release available 🎉. Version 0.11.0 sees a few usability improvements and some experimental changes like composing viewers via hiccup. For a full list of changes, you can visit the https://github.com/djblue/portal/releases/tag/0.11.0. You can also experiment with portal online https://djblue.github.io/portal/. Feedback welcome!#2021-04-1610:39LuMight be good to expand the snippets when clicking over the ... .. just a thought 🙂#2021-04-1619:37Alex Miller (Clojure team)org.clojure/data.json 2.2.0 is now available, changes since 2.1.0 • Add https://clojure.atlassian.net/browse/DJSON-41: New support for writing java.time.Instant and java.util.Date (+ subclasses) ◦ New options to write functions: ▪︎ :date-formatter - java.time.DateTimeFormatter to use (default DateTimeFormatter/ISO_INSTANT) ▪︎ :sql-date-converter - fn to convert java.sql.Date to java.time.Instant (default provided) • Perf https://clojure.atlassian.net/browse/DJSON-36: Refactor code in read-array and read-object • Fix https://clojure.atlassian.net/browse/DJSON-43: Fix buffer overflow in pushbackreader (fixed in 2.1.1) All changes by @slipset - thanks for his efforts and for the bug/enhancement reports from others#2021-04-1714:56emil0rez-wire 0.5.0 is released. This release adds branching to forms Repo: https://github.com/emil0r/ez-wire Official documentation: https://emil0r.github.io/ez-wire-docs/#2021-04-1717:12ribeloa simple db that copies the functionality of datascript, using meander as a query tool https://github.com/ribelo/doxa/#2021-04-1815:30Joshua SuskaloVersion 1.0.0 of farolero has just been released! Farolero is a library for thread-safe Common Lisp style conditions and restarts, including debugger support and additional control flow operators. Limited support is also provided for ClojureScript, with plans for full support once I can determine the cause of a few bugs (any ClojureScript experts who can help with that, PRs are appreciated). Repo: https://github.com/IGJoshua/farolero Documentation: https://cljdoc.org/d/org.suskalo/farolero/CURRENT#2021-04-1904:34Candidjoker v0.17.0 is released: https://github.com/candid82/joker/releases/tag/v0.17.0#2021-04-1908:38Karol WójcikProudly annoucing new version (0.1.18) of [holy-lambda](https://github.com/FieryCod/holy-lambda) a simple micro framework which turns your code into AWS Lambda functions for both JVM and native runtime. Notable changes: - Interceptors support https://github.com/FieryCod/holy-lambda/blob/master/examples/hello-lambda/src/hello_lambda/core.clj - Fixes for a project template. You can now generate a project with lein new holy-lambda <name-of-the-project> - Basic support for GraalVM EE (PGO optimizations in-process) - Easier way of generating native configurations via (agent/in-context). Docs about native-configurations (in-progress) - Unify responses. Response can be either null (for event ack) or a map of [:body, :isBase64Encoded :headers :multiValueHeaders] (breaking change) - Rename gen-main to entrypoint. Move to fierycod.holy-lambda.native-runtime (breaking change) - Use new group name for all artifacts (old one could not be verified :() io.github.FieryCod/holy-lambda - Add some docs EDIT: You can now also join a slack channel #holy-lambda 🙂#2021-04-1908:55Tomas BrejlaSince you added GraalVM EEsupport.. Are there any noticable differences between CE and EE-compiled versions? Different performance characteristics, utilization of resources,..?#2021-04-1909:36Karol WójcikI don't know yet. This or next month I will make some benchmarks for: • holy-lambda-ce • holy-lambda-ee • holy-lambda-ee-with-pgo-optimizations , compare them with other runtimes and write a summary in doc/ 🙂 My bet is that there will be some real differences for complex applications, but you have to wait a little bit for a proof 🙂#2021-04-1909:26slipsetPlease don’t use clojure.data.json 2.2.0 there is a serious data-loss bug in it. The offending commit has been reverted, but I’m waiting for a new release. I’m terribly sorry for this. Thanks to @thheller for reporting the bug.#2021-04-1911:06nilernIntroducing Eximia, the state of the art Clojure XML processor 😉 Roughly 4x faster than the usual options. Small codebase. With XML namespace support and secure defaults. https://github.com/nilern/Eximia#2021-04-1911:19borkdude@U4MB6UKDL Looks cool. In the README you refer to clojure.xml (Clojure 1.10.3), what is this?#2021-04-1911:20borkdudeIs that the built-in namespace? That's pretty much deprecated in favor of data.xml I think#2021-04-1911:28nilernYes and yes https://clojure.atlassian.net/browse/CLJ-2583#2021-04-1911:30nilernBut I doubt that that is common knowledge#2021-04-1911:31borkdudeI think not mentioning clojure.xml contributes to the process of deprecation. Many people probably don't know it even exists ;)#2021-04-1911:32borkdudeAny chance those speed-ups can end up in clojure.data.xml proper? @U04V5VAUN has been doing some nice work on clojure.data.json. Perhaps @U064X3EF3 is open to have someone contribute to clojure.data.xml in a similar fashion?#2021-04-1911:33borkdudeclojure.data.xml hasn't really seen a lot of work on it for a while, it would be nice to get someone who knows this stuff on it maybe#2021-04-1911:34nilernI thought maybe they would at least get a stable release out if I do this#2021-04-1911:37nilernThe laziness in data.xml does have substantial performance and complexity costs but I think there is some low-hanging fruit there nevertheless#2021-04-1913:11Alex Miller (Clojure team)Sure, happy to look at stuff like I've been doing with Erik in data.json. The important thing is to break it into manageable (smaller better) chunks, defined well with tickets, and build patches for each. I can then evaluate those on a regular basis (often on Fridays I have a little more time for things like this). I would want to communicate with Herwig on that stuff but I have not a lot of luck getting in touch with him recently.#2021-04-1913:17nilernOne specific thing I noticed is reusing XMLInput/OutputFactories. It's probably the reason Eximia is 15x faster than data.json on tiny inputs#2021-04-1913:17slipsetjson?#2021-04-1913:18nilernOops. s/json/xml/#2021-04-1918:42vemvGreat work 👏 Probably it would be a good idea to have some sort of roundtrip/equivalence test against clojure.data.xml#2021-04-1919:48nilernPerhaps. Although with namespaced XML they aren't going to be equivalent anyway.#2021-04-1913:29Alex Miller (Clojure team)org.clojure/data.json 2.2.1 is now available - addresses a serious bug in 2.2.0 (rolls back the change)#2021-04-1916:35katoxPGMig 0.7.0 is out. Check it out if you use .cljmigrations using SCI. The native image compiled binary should be now on par with uberjar but still much faster. https://github.com/leafclick/pgmig/releases/tag/v0.7.0#2021-04-1923:38JeremyHi everyone. I’ve written a https://github.com/jdf-id-au/talkfor https://netty.io/ to try to make websockets easy to use from Clojure without bringing in lots of dependencies. Intro post on https://clojureverse.org/t/netty-http-websockets-wrapped-in-core-async-jdf-talk/7535.#2021-04-2010:51plexusWe've been putting out a number of succesive Glögi releases to accomodate breaking changes in the Google Closure Library. All users are encouraged to upgrade
[lambdaisland/glogi "1.0.106"]
{lambdaisland/glogi {:mvn/version "1.0.106"}}
Please report any remaining issues on Github. Discussion in #lambdaisland. https://github.com/lambdaisland/glogi/
#2021-04-2115:00Karol WójcikI'm thrilled to announce a new version of holy-lambda 0.1.21 which now supports #babashka runtime 🙂 Special thanks to @viesti and @borkdude! You're awesome guys! You can now use one of the following runtimes: - java - babashka (here is a proof https://bdsa1uru44.execute-api.eu-central-1.amazonaws.com/Prod/) - native https://github.com/FieryCod/holy-lambda For now, babashka is shipped in zip which is quite lame and makes the artifact super big (50mb). I'm aware that's a lot, therefore I will provide a special AWS Layer for babashka in the future. Please tag this announcement with babashka icon if you would like me to do it :) If you would like to give babashka runtime a spin then use run the following:
lein new holy-lambda example
cd example

make USE_BB=true deploy-native # For babashka
make deploy-native # For native-runtime
make deploy # For java runtime
To remove stack just run:
make destroy-stack
PS: Template copies /usr/bin/bb to project path, for now, therefore you need babashka on /usr/bin/ If you have any question visit #holy-lambda channel 🙂
#2021-04-2115:05Karol WójcikAlso adding support for babashka was very straightforward. If anybody is interested in reading the details, then here is a commit: https://github.com/FieryCod/holy-lambda/commit/7716803810fbf919dcbc65828a37782a7c4175ac#2021-04-2216:18metasoarousCool beans! Is there anything preventing this from being used with the clojure CLI & deps.edn, or is lein required?#2021-04-2216:28Karol WójcikIt's not required 😄#2021-04-2218:56Jakub Holý (HolyJak)I believe somebody already made a layer with bb, though might not fit your needs.#2021-04-2219:55Karol WójcikHi @U0522TWDA! Yep I’m aware. I will base the layer on some of @U0FT43GKV work ;) #2021-04-2306:16Dainius JocasHi, nice work 👍 @UJ1339K2B if anything is needed just ping me#2021-04-2306:16Karol Wójcik@U0FT43GKV 1.Would love to know whether you pay anything for hosting the layer? 2. May I please tag you in the repo for the parts that were inspired by your work?#2021-04-2306:23Dainius Jocas1. The layer was uploaded using my personal AWS account but to have the layer uploaded I didn't have to pay. AFAIK, you pay just for the usage of lambdas that uses some layer, i.e. the regular AWS price. 2. Yes, that would be great. I'm curious to learn which parts of my little hack helped others @UJ1339K2B #2021-04-2306:24Karol Wójcik1. So each time somebody use my layer I pay for it?#2021-04-2306:30Dainius JocasNo. The lambda layer is like the library in clojars: you just upload it (free for you), and whoever use it in whatever way they do it, you have nothing to do with paying anything. Another way to think that a layer is just a zip in some public AWS S3 bucket, i.e. you pay nothing, and you aren't paid.#2021-04-2306:37Karol WójcikOk got it. That was exactly the part I was missing. Thank you so much.#2021-04-2209:06blueberryNew releases of ClojureCUDA, Neanderthal, and Deep Diamond, with CUDA 11.2 support. http://clojurecl.uncomplicate.org, http://neanderthal.uncomplicate.org, and https://github.com/uncomplicate/deep-diamond#2021-04-2212:24bozhidarCIDER 1.1 is out! More details here https://github.com/clojure-emacs/cider/releases/tag/v1.1.0 Cheers! cider#2021-04-2213:08pez@U6BUSDFMX I deleted your sweet reply CIDER glass. It’s because the content at the root level of this channel needs to be announcements. There are bots and such publishing it around the interweb. Totally agree with the sentiment!#2021-04-2213:08pezcider#2021-04-2213:09cassielMy bad - no problem. I put it in the wrong place.#2021-04-2214:39tonywhen could we expect it in https://stable.melpa.org/#2021-04-2215:40bozhidarNo idea. I assume it will land there fairly soon, but I'm not familiar with the build schedule and I don't know how often the packages are rebuilt.#2021-04-2215:41bozhidarThere's also the chance that the extra tag I added to fix the docs version broke MELPA in some way. 😄#2021-04-2217:32Eric IhliFor anyone doing language-related work, I just released a library that converts text to phonetic sounds and does syllabification of those sounds. https://github.com/eihli/phonetics https://clojars.org/com.owoga/phonetics
(get-phones "alaska")
  ;; => [["AH0" "L" "AE1" "S" "K" "AH0"]]

  (syllabify (first (get-phones "alaska")))
  ;; => [["AH0"] ["L" "AE1" "S"] ["K" "AH0"]]

  (syllabify (first (get-phones "foobarbazia")))
  ;; => [["F" "UW1"] ["B" "AA1" "R"] ["B" "AA1"] ["Z" "IY0"] ["AH0"]]

  (get-word ["AH" "L" "AE" "S" "K" "AH"])
  ;; => ["alaska"]

  (get-word ["N" "IY" "S"])
  ;; => ["neice" "neece" "niece" "nice(1)" "kneece" "kniess" "neiss" "neace" "niess"]
It leans heavily on http://www.speech.cs.cmu.edu/cgi-bin/cmudict/. This pairs well with https://github.com/eihli/clj-tightly-packed-trie for large data models to provide things like phonetic autocomplete or finding rhymes.
#2021-04-2218:05pezVery cool! How does the approach compare to something like soundex?#2021-04-2218:12Eric IhliI wasn't familiar with Soundex. Looking at it now, it looks like Soundex is like a hash function that hashes words (specifically names - proper nouns) to a 4 character code. Robert and Rupert both map to "R163" in Soundex. But the phonetics are different. I'm guessing Soundex is used as a hashing function in database indexes? The phonemes this produces are for "human" consumption.#2021-04-2219:03dominicm> A future TODO and a request for contribution would be for a function that converts a made-up set of phonemes into a somewhat appropriate spelling of a word. Haha, this was my immediate thought "Oh cool, a way to generate words" :P#2021-04-2219:22Eric IhliA quick search didn't reveal any existing implementations of the reverse of https://freetts.sourceforge.io/javadoc/com/sun/speech/freetts/lexicon/LetterToSoundImpl.html.#2021-04-2219:38Eric IhliLooks like this paper describes an implementation. https://www.cs.cmu.edu/~hovy/papers/07IJCAI-spelling-variants.pdf#2021-04-2219:48pez> I’m guessing Soundex is used as a hashing function in database indexes? Yes, that’s how I remember it. Long time since i used it. Back in the mid 90's. I adapted it for Swedish names for a CRM I was working with.#2021-04-2222:39wilkerlucioPathom Viz 2021.04.22 is out! The changes: - UI improvements on Request tab, now the recent items will be at the top. The max size for a request row can now fit 5 lines of query, and I add a border on the right side to make easier to scroll the whole list in the presence of many scrollable requests. - Now when seeing node details in the graph, there is a button to show the whole graph data, this complements the data from individual nodes. - Now when you log a graph you can click on nodes to see their details. Another great news is that thanks to @ales.najmann now Pathom Viz also creates Windows builds! Now you can download Mac, Linux and Windows builds at the Pathom Viz releases, download 2021.04.22 at: https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.4.22#2021-04-2223:55littleliin addition pathom-viz is newly available via Scoop installer on Windows.
scoop install pathom-viz
#2021-04-2320:05Michaël SalihiHi everyone! I’ve written https://github.com/prestancedesign/inertia-clojure a Ring middleware for https://inertiajs.com/, a new concept to build single-page apps without building an API. This lets you build SPA with Reagent, React, Vue and Svelte using Clojure server side for the routing, controllers, etc. If your interested, there is some examples in the lib repo: https://github.com/prestancedesign/inertia-clojure Cheers!#2021-04-2413:54Michaël SalihiWoohoo! My Clojure adapter is added to the Inertia website. 👍#2021-04-2515:11eccentric JI started embarking on a project creating a ring-like interface for express. It’s working but want to think some things through and write docs/tests before releasing. How true to ring’s API did you stay? Right now all my test handlers are manually extracting promise data that the request could be wrapped in and returning a promise with the result. I’m tempted to switch gears to something between ring and interceptor based since I can manage promises automatically between the handlers that way. Given that you made this I might go ahead and change my api so that it’s ring-ish but is async or sync without the user having to think or know about it.#2021-04-2720:08Michaël SalihiSound interesting. 👍 It kinds remind me Macchiato, do you know? https://github.com/macchiato-framework/macchiato-core#2021-04-2804:28eccentric JI had no idea about that one. Thanks! It's definitely higher quality than what I have currently. Might expand on what I have to make it more ergonomic for cljs\js and see what comes of it. Will definitely have to start playing with your library and macchiato though 🙂#2021-04-2415:22mike_ananevHi! New library template is out. Key feature of this release that all tasks performed by babashka tasks https://github.com/redstarssystems/rssyslib This template will give you the following basic project workflow:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "94f9fdfff1d4f9f6e4a4a6"}, :content ("[email protected]")}
Changelog https://github.com/redstarssystems/rssyslib/blob/develop/CHANGELOG.adoc
#2021-04-2417:13richiardiandreaI am really happy babashka is taking over - I had a very pleasant year when I was using lumo for scripting at work and I think that niche is now covered again - thanks @U04V15CAJ!#2021-04-2416:13nhaSmall announcement for https://github.com/turtlequeue/setup-babashka This is a Github action that installs and caches babashka babashka#2021-04-2421:52Candidjoker v0.17.1 is released: https://github.com/candid82/joker/releases/tag/v0.17.1#2021-04-2610:07Dainius JocasA new release of the Lucene grep, that includes a flexible text analysis pipeline construction from most of what Lucene has to offer https://github.com/dainiusjocas/lucene-grep. Now things like this are possible now:
echo "<p>foo bars baz</p>" | \
  ./lmgrep \
  --only-analyze \
  --analysis='
  {
    "char-filters": [
      {"name": "htmlStrip"},
      {
        "name": "patternReplace",
         "args": {
           "pattern": "foo",
           "replacement": "bar"
        }
      }
    ],
    "tokenizer": {"name": "standard"},
    "token-filters": [
      {"name": "englishMinimalStem"},
      {"name": "uppercase"}
    ]
  }
  '
=>
["BAR","BAR","BAZ"]
#2021-04-2615:39Alex Miller (Clojure team)org.clojure/core.async 1.3.618 is now available • https://clojure.atlassian.net/browse/ASYNC-237: (CLJS) timeout timers access array elements with out-of-bounds index#2021-04-2616:04jerger_at_ddaWe proudly announce the first working release of https://gitlab.com/domaindrivenarchitecture/k8s-mastodon-bot We generate valid k8s-deployment-yamls for mastodon-bot. With deep (spec-)validation and in a multi-target setup (cljs, clj, graalvm-native).#2021-04-2617:44Alex Miller (Clojure team)org.clojure/data.json 2.2.2 is now available • Perf https://clojure.atlassian.net/browse/DJSON-36: Reapplied updated refactored code in read-array and read-object • Add https://clojure.atlassian.net/browse/DJSON-45: Generative tests for read/write roundtrip#2021-04-2716:01Noah Bogartwould it be helpful to run data.json over the JSON Test Suite (https://github.com/nst/JSONTestSuite)? if it would be, how best should I raise any issues that are found? JIRA?#2021-04-2716:25Alex Miller (Clojure team)Sure, would be best to integrate something like that into the repo so it can stay in sync (could be a script or whatever). If you’re interested in working on that, would be best for you to become a contributor and get jira access#2021-04-2716:37Noah BogartCool, I’ll see if I can get something working and if so, I’ll sign the CLA#2021-04-2904:35Noah BogartI have signed the CLA and submitted a JIRA support ticket for access.#2021-04-2619:46Alex Miller (Clojure team)com.cognitect/transit-js 0.8.874 is now available • goog.isArray & goog.isString removed, switch to goog.typeOf#2021-04-2619:48Alex Miller (Clojure team)com.cognitect/transit-cljs 0.8.269 is now available • Update transit-js dependency to 0.8.874#2021-04-2710:37borkdudeNew release of edamame, a highly configurable clojure / EDN parser with accurate location metadata. Release notes: https://github.com/borkdude/edamame/blob/master/CHANGELOG.md#0011#2021-04-2710:40borkdudeAlso a new release of sci, a configurable Clojure interpreter suitable for scripting and Clojure DSLs which is compatible with JVM / GraalVM native and ClojureScript (advanced). https://github.com/borkdude/sci/blob/master/CHANGELOG.md#v025#2021-04-2715:06Jakub Holý (HolyJak)Have you / will you make a tool called fi? Would be a nice companion to ☝️ :)#2021-04-2715:07borkdude:)#2021-04-2715:58chrisnI posted a https://github.com/cnuernber/cljs-lambda-gateway-example of using AWS API Gateway proxying to AWS lambda to host a full reagent-based webapp running in graal native.  This required a bit of a bridge between API Gateway and a ring handler stack; this bridge I think would be best done by the community.  In any case,  Enjoy 🙂.#2021-04-2716:10Karol Wójcik@UDRJMEFSN There is already such bridge which supports native, babashka and java runtime 😄 (Disclaimer: It's done by me)#2021-04-2716:17chrisnI know, you are speaking of https://github.com/FieryCod/holy-lambda which I think is a good pathway but for my tastes it is not a good demonstration of the basic pathway end to end as it hides a lot of details. I can link to it in the addendum section however if people want to explore a more batteries-included pathway. There is more here than just proxy-lambda integration as it this is also demonstration of how to use shadow-cljs which I see lots of questions about and a basic demonstration with instructions of how to setup API Gateway to forward such requests. The differentiator is this is project designed for teaching, not designed as a library for further use 🙂.#2021-04-2716:22Karol WójcikSure! Thanks for your explanation! I do appreciate it a lot!#2021-04-2720:56ericdalloclojure-lsp Released clojure-lsp https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.04.27-20.17.45 With the power of clj-kondo, adds the feature of finding the definition of re-frame.core registrations like reg-event-db , reg-sub and others! No more searching by text in the whole project with that 🎉 For more details, check #lsp#2021-04-2721:16Michaël SalihiA few days ago, I released https://github.com/prestancedesign/inertia-clojure Ring middleware. Here is a more complete demo of how I started from @seancorfield 's usermanager fork to turn it into a SPA. More info here: https://github.com/prestancedesign/usermanager-reagent-inertia-example Feedbacks are welcome. Cheers!#2021-04-2722:03mauricio.szaboJust published a new version of Chlorine, the socket-repl package for the Atom editor. In this version, some fixes, a new goto var definition for namespaces, and also the ability to extend core commands using Pathom. The feature is not yet 100% documented, but I'm doing small spikes of documentation here: https://github.com/mauricioszabo/repl-tooling/blob/master/doc/extending.md#Add-new-commands. Also, I'd like to thank @wilkerlucio for all the help, encouragement, and also for doing an incredible job with Pathom. You're the man 👍#2021-05-0114:06ribeloany finitely complicated problem can be made infinitely complicated by a finite number of macros, so why not write macros that write (macro based)meander code that would generate transducers functions? https://github.com/ribelo/danzig#2021-05-0210:57ribelofrom today doxa can be even faster than datascript https://github.com/ribelo/doxa#can-we-be-faster-than-datascript-yes#2021-05-0212:56Vincent CantinYou posted a link to the same library 2 weeks ago. https://clojurians.slack.com/archives/C06MAR553/p1618679544447900#2021-05-0213:07ribelosry, is there any place for new releases?#2021-05-0213:33steffan#releases#2021-05-0214:18yuhanIs this a library meant for public consumption or more like a series of explorations? I found the API quite hard to understand from the Readme, and none of the public functions have docstrings - just some feedback 🙂#2021-05-0214:21yuhanThe source definitely reads more like an exploratory notebook and it seems that the dependencies on encore, timbre, shadow-cljs are only used in comment forms and should be put into some sort of :dev alias.#2021-05-0214:41ribelo@UCPS050BV doxa was born by accident while testing what a meander can do#2021-05-0214:41ribeloI did not expect any interest, so for a long time there were neither tests nor readme#2021-05-0214:42ribeloI will probably write docstrings once I have worked out more or less in my head how it should look and be used.#2021-05-0214:48yuhanI feel like the commit function would look better taking variable arity of transactions, except there's an optional tx-meta argument which I couldn't figure out what it was for#2021-05-0214:51ribelotx-meta is written to the db metadata#2021-05-0214:52ribeloyou can only listen! for a specific tx-meta#2021-05-0215:02ribelo
(def conn_ (atom (dx/create-dx)))
(listen! @conn_
         (fn [db]
           (let [tx-meta ((meta db) :tx-meta)]
             (cond
               (#{:one :two} tx-meta)
               (println :something)
               (#{:three} tx-meta)
               (println :something-else)))))

(dx/commit! conn_ [:dx/put {:db/id 0 :key :value}] :one)
(dx/commit! conn_ [:dx/put {:db/id 1 :key :value}] :two)
(dx/commit! conn_ [:dx/put {:db/id 2 :key :value}] :three)
;; => repl
;; :something
;; :something
;; :something-else
#2021-05-0304:24steveb8nI like this lib and will definitely use it if it reaches prod quality. thanks for making it#2021-05-0321:10wotbrewI am a little sceptical that a hash index {eid {k v}} could possibly beat indexed datascript in the general case? e.g not trivially small databases, and not 'get large portion of all the rows' type queries. @U0BBFDED7 any magic I am missing? Aren't value queries going to have to scan the the whole 'table'?#2021-05-0321:14ribelonested map can be faster due to the possibility of limiting the iterated elements, @U0GE2S1NH#2021-05-0321:15ribelo
[(datascript-query) (dx-query) (fast-dx-query)]
;; clj => [182.98 685.15 71.05] - in ms
for a normal query doxa is ~5x slower
#2021-05-0321:19ribeloBy the way, initially the goal was not to race with datascript at all, rather easy interop with re-frame and seamless data synchronisation with firestore#2021-05-0322:03steveb8nusing the re-frame app-db is why I like this lib. using datalog instead of specter for subs is a nice architecture. it does mean losing some perf because equals? can’t use identical? but that’s ok for 80% of my use cases#2021-05-0923:55steveb8n@U0BBFDED7 do you want issues logged yet? I have a couple of feature requests: 1. runtime query & 2. query/pull without ?table. just checking when you think bugs/feature requests are useful#2021-05-1008:26ribeloYes, please. Especially the feature request.#2021-05-1008:34steveb8ngreat. thanks#2021-05-1009:31ribeloDo grapql entities always start with two underscores?#2021-05-2109:18steveb8nonly the :typename field. the only other standard field is :id#2021-05-2109:20steveb8nyou can see it here https://countries.trevorblades.com/#2021-05-2109:20steveb8npaste this query in the left panel and run it….#2021-05-2109:20steveb8nquery { countries { typename code, name, currency } }#2021-05-2109:22steveb8nalthough that api does not provide an :id so maybe not a perfect example#2021-05-2109:55steveb8nI'm away from my desk at the moment but I saw your comment. Thanks#2021-05-2109:57steveb8n1 question. Could a runtime arg be passed using the :in clause? That way it would match the behaviour of the other implementations#2021-05-2120:14ribeloI have just fixed it#2021-05-0411:25mike_ananevNew release of application template https://github.com/redstarssystems/rssysapp Now all functionality of `just`, `direnv` utilities performed by `babashka` v0.3.7+ This template will give you the following basic project workflow:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "3f5256545a7f525d4f0f0d"}, :content ("[email protected]")}
#2021-05-0513:32bozhidarclojure-mode 5.13 is out! The release features a few small improvements https://github.com/clojure-emacs/clojure-mode/releases/tag/5.13.0#2021-05-0515:00peztoggle-ignore, hmm… Someone asked for a command helping with ignores quickly in Calva, but we agreed that typing alt+left, #_ was quick enough (the first keypress there moves the cursor to the start of the form). But now, looking at the changelog for this update… I see a toggle-ignore-surrounding-form and it starts to make more sense.#2021-05-0514:01Karol WójcikAnnouncing clojure-graalvm-agent-helper to ease native configuration generation for native-image tool. https://github.com/FieryCod/clojure-graalvm-agent-helper#2021-05-0520:15seancorfieldcom.github.seancorfield/next.jdbc {:mvn/version "1.2.659"} — The next generation of clojure.java.jdbc: a new low-level Clojure wrapper for JDBC-based access to databases. — The main difference from 1.1.646 (and the reason for 1.2.x) is that clj-commons/camel-snake-kebab is now an unconditional dependency, rather than a conditional one, which improves GraalVM-native compatibility and removes some potential edge cases when trying to use the library in certain multi-artifact projects. https://cljdoc.org/d/com.github.seancorfield/next.jdbc/1.2.659/doc/getting-started Follow up in #sql Thanks to @snorremd for additional PostgreSQL-related docs and @delaguardo for help getting GraalVM testing up and running!#2021-05-0522:52borkdudeIt is possible to make dependencies conditional and make them compatible with GraalVM native-image. I would say this could even improve native-image compatibility by leaving out deps that don't play well with it (and reduce binary size) but do it the right way: only resolve at compile time (top level) and not at runtime (function body). https://github.com/yogthos/Selmer/blob/master/src/selmer/tags.clj#L392-L403#2021-05-0522:58borkdudeBut it seems you were already doing this correctly, so I don't understand why this change makes it better for GraalVM. Anyway, it's great that you are considering support for it :thumbsup:#2021-05-0600:02seancorfieldI was running into problems with it in our multi-artifact monorepo at times and I just sort of got tired of working around it. I also wasn’t 100% sure I was doing it correctly, conditionally, for use with GraalVM-native so I figured I should just remove the “at times”/uncertainty and be done with it. Lots of next.jdbc users seem to want the snake/kebab conversions anyway (and it’s not like next.jdbc doesn’t already depend on other libs — I’m a bit surprised the java.data dependency/code doesn’t cause GraalVM-native issues…?).#2021-05-0619:30borkdudeNew Selmer release! 🎉. Selmer is a powerful templating engine for Clojure and is now written in 100% pure Clojure with no external dependencies. https://github.com/yogthos/Selmer 1.12.38 - made JSON dependency pluggable, remove hard dependency on cheshire 1.12.36 - improved default pretty printing of the context map using debug tag - allow whitespace in filter: {{ foo | default:bar }} 1.12.35 - made json-html dependency optional, removed commons-codec dependency Thanks @yogthos for the awesome library and being open to receive these enhancements. Selmer (1.12.35) is now part of #babashka (version 0.3.8, bb will bump to Selmer 1.12.38 soon).#2021-05-0707:02roklenarcicMain thing missing from Selmer compared to python’s Jinja 2 (which has similar syntax) is whitespace control. If you put tags like {% if %} on their own line, you’ll get an empty line in the output. and you cannot say {%- if -%} . It makes writing some whitespace sensitive markup like YAML really hard. You basically need to keep the if, else, endif to the same line which can be a real mess.#2021-05-0707:03borkdudeMaybe you can post an issue about this?#2021-05-0707:05roklenarcichttps://github.com/yogthos/Selmer/issues/115#2021-05-0707:05roklenarcic5 years old 🙂#2021-05-0707:07borkdude@yogthos ?#2021-05-0707:09borkdudeAh it seems he’s open to the contribution so what are people waiting for :)#2021-05-0707:10roklenarcicHehe, I think the change is pretty large, as it fundamentally changes the processing, because you might have to remove content before the tag based on the tag itself#2021-05-0707:11borkdudeHas anyone tried?#2021-05-0707:12roklenarcicHaven’t seen it 🙂#2021-05-0707:12roklenarcicOn the second thought, it doesn’t change the render, it changes the template parse, as you can already cut the appropriate whitespace when you parse the template#2021-05-0707:14borkdudeI made a change to allowing whitespace in filters yesterday. It was doable. Don’t know about this change, but seems like a nice challenge#2021-05-0709:33Karol WójcikThank you so much @U04V15CAJ! Great release!#2021-05-0712:58yogthosand yeah white space control is a bit of a rabbit hole, the trickiest part is that you have to be able to look ahead to the end of the line to see if it's just space, and the reader doesn't support unbounded look ahead#2021-05-0712:58yogthosso you'd have to make a version of a reader that's able to scan to see if the next non space character is a new line#2021-05-0713:03borkdude@yogthos isn't this just about ignoring all whitespace between tags? I think this can be done using a flag? when you encounter the "signal" to ignore whitepace, you set the flag, then the reader ignores all blank TextNodes, until it finds the next "signal" to ignore whitespace?#2021-05-0713:04yogthosoh I guess there are a few different cases here, one I was thinking of is if you have a tag on an empty line, and you want to remove that line after#2021-05-0713:06yogthosspace inside the tag is easier to control#2021-05-0713:10borkdudeyou mean it like this right? {% if foo} <inside tag> \n\n {{dude}} <inside tag> \n\n{% endif}#2021-05-0713:10borkdudefrom the issue I was interpreting it like that: people would like to spread the expression over multiple lines, while not rendering multiple lines#2021-05-0713:10borkdudebut it would be good to double check#2021-05-0714:30yogthosoh I guess yeah that could be another use case 🙂#2021-05-1018:32roklenarcicThere’s basically 2 cases: {% tag -%} is easy you basically start droping whitespace after the tag until you find something that is not a tag#2021-05-1018:33roklenarcicThe other case is {%- tag %} which you can solve if you maintain the index of the last non-whitespace character you’ve encountered, then when you hit a tag like that you can simply set the length on the StringBuilder back to that index before you proceed with .setLength#2021-05-1018:34borkdudeah is that how it works#2021-05-1018:34borkdude@U66G3SGP5 I have a branch which is very close to this, I think#2021-05-1018:35roklenarcicThat;s how I would approach it at least#2021-05-1018:35borkdudebut I discussed this syntax with yogthos and it didn't feel compose-able to me. we bounced around some ideas and came up with e.g. {% tag(trim) %}, a bit like [:tag {:trim true} ...] in hiccup#2021-05-1018:36borkdudebut I guess we can meet people where they are coming from jinja etc#2021-05-1018:37borkdude@U66G3SGP5 Feel free to try out this branch: https://github.com/borkdude/Selmer/tree/whitespace-control#2021-05-1018:38roklenarcicYou should think carefully if your variant enables everything that you get when you have 3 different variants available: {%- tag %} , {% tag -%} and {%- tag -%} I assume your solution is only 1 of these 3#2021-05-1018:40borkdudeI was mostly working on this from the angle of "is it possible", I wasn't actually interested in any specific solution#2021-05-0705:08Alex Miller (Clojure team)org.clojure/data.json 2.2.3 is now available • Fix https://clojure.atlassian.net/browse/DJSON-47: Make number parsing match spec (reject invalid numbers) - thanks to @nbtheduke!#2021-05-0705:29seancorfieldcom.github.seancorfield/honeysql {:mvn/version "2.0.0-rc1"} — SQL as Clojure data structures. Build queries programmatically -- even at runtime -- without having to bash strings together. — This is the first Release Candidate for the 2.0 version, which has been in development for about seven months and has been tested by various people for a few months now (in production). This contains two small bug fixes and one new formatting option, compared to Beta 2. https://cljdoc.org/d/com.github.seancorfield/honeysql/2.0.0-rc1/doc/getting-started Follow up in #honeysql Thanks to @snorremd and @dharrigan in particular for diligent testing and finding bugs!#2021-05-0718:28Michael GardnerWow, I didn't realize there was a HoneySQL 2.0 in the works. It looks great! After reading "Differences Between 1.x and 2.x", I have a couple questions: * Is setting :quoted the only way to toggle snake_case conversion? That feels like a complection that will come back to bite us later. * It's a little silly, but I have a personal vendetta against the words "helper" and "util" in namespaces due to their vagueness. Did you consider honey.sql.builders or just honey.sql.build?#2021-05-0718:36seancorfield@U01R1SXCAUX HoneySQL has had a helpers namespace for many, many years — V2 simply matches V1 on that (although it’s honey.sql.helpers vs honeysql.helpers).#2021-05-0718:37seancorfieldI’m not sure what you mean about :quoted toggling snake_case?#2021-05-0718:52Michael GardnerI know v1 had a helpers ns, I just wanted to bring it up since this is the only chance to choose something different. Anyway it's just my own sense of aesthetics, so I'm not going to try to push on that#2021-05-0718:53Michael Gardneron the other point, perhaps I misunderstood this line from the v1->v2 guide:
:allow-dashed-names? -- if you provide dashed-names in 2.x, they will be left as-is if quoting is enabled, else they will be converted to snake_case (so you will either get "dashed-names" with quoting or dashed_names without).
#2021-05-0718:57seancorfieldDuring the alpha releases, the namespace could have been changed. Once it hit beta, only accretive/fixative changes were being made. So that ship sailed over a month ago.#2021-05-0719:01Michael Gardnerfair enough#2021-05-0719:03seancorfieldI guess you’re not in the #honeysql channel? This stuff has been discussed there over the past few months as folks have been testing the alpha and beta releases.#2021-05-0719:04Michael Gardnerno, I'm not— sadly we're not using HoneySQL at my current shop so I hadn't been following it. Thanks for the pointer; I'll go look at the archives#2021-05-0719:05seancorfieldNo one has raised any concerns about the dashed names issue so far — beyond V1 being far too complicated in that area 🙂#2021-05-1017:36Vladislavnew syntax for :array :cast :inline etc is wow as useful!#2021-05-0720:47rschmuklerJust cut the first snapshot of com.teknql/shadow-cljs-tailwind-jit - introduces management of Tailwind's stylesheet JIT watch / release process into shadow as build hooks. Helps you to avoid having to pollute your repo with a postcss.config.js and tailwind.config.js boilerplate (still relies on you having a package.json, but that seems fair enough in most cljs projects). Early early release but if anyone wants to give it a spin: https://github.com/teknql/shadow-cljs-tailwind-jit#2021-05-0720:49p-himikWhat are the main differences from https://github.com/jacekschae/shadow-cljs-tailwindcss?#2021-05-0720:51p-himikAh, you're using hooks whereas that project uses npm run.#2021-05-0720:54rschmuklergreat question! That repo is an example of running tailwindcss-jit alongside shadow. It works by using npm run dev to start both the shadow process and the tailwind process. Your project is expected to have the required config files (ie. tailwind.config.js, postcss.config.js , and a boilerplate src/css/tailwind.css). My project generates those files for you based off of config in your EDN (ie. you can have a :tailwind/config {...} in your shadow file, and then shadow's build hooks take care of maintaining a side-car process that manages a temp directory with the required boilerplate that then outputs to your project directory. The end result is that it feels less like a node project and more like a shadow project. It also has the benefit that most editors know how to cider-jack-in (or their equivalent) to a shadow project, while starting a project via NPM would require additional config#2021-05-0721:00p-himikThanks for the detailed answer!#2021-05-0722:37Alex Miller (Clojure team)io.github.cognitect-labs/test-runner v0.2.0 is now available (as a git dep) • Fix #12 - fix reflection warning • Fix #17 - mix of -n and -r should work • Add #26 - use exit code 1 when args are invalid • Add #17 - skip fixtures if no vars from test ns are being run • Add #28 - add entry point for -X style invocation • Bump deps to latest + clojure 1.9.0#2021-05-0722:43Alex Miller (Clojure team)there are a few more outstanding issues/prs on the repo, I'll get to those the next time I take a pass here. let me know if I broke anything. I gave this release a tag and will continue to do that in the future so there is some sort of human version beyond the sha.#2021-05-0723:53richiardiandreaThis is a great tool, thanks for refreshing it!#2021-05-0807:47vlaaadA bit off-topic, but shouldn't https://cognitect-labs.github.io have some info about test-runner?#2021-05-0809:40borkdudeMaybe it should just be promoted as the official test runner on http://clojure.org?#2021-05-0809:41borkdudeOr somewhere in the deps / CLI guide#2021-05-0814:02Alex Miller (Clojure team)It’s not an “official” test runner#2021-05-0814:03borkdudeBut it could be promoted to be one#2021-05-0814:03Alex Miller (Clojure team)@U47G49KHQ it should! I didn’t realize that page existed#2021-05-0917:56Alex Miller (Clojure team)@U47G49KHQ added (and a lot of other cognitect-labs projects). turns out I created that page, but have no memory of doing so. :)#2021-05-1009:02nilernI don't think an official test runner even makes sense if it is just another dependency anyway.#2021-05-1009:06borkdude@U4MB6UKDL Don't you think mentioning this as a "go to" solution for deps.edn-based projects in the Deps and CLI guide would be useful?#2021-05-1011:02Alex Miller (Clojure team)I do, I actually thought it was in there#2021-05-1023:28seancorfieldIt’s mentioned on the t.d.a wiki https://github.com/clojure/tools.deps.alpha/wiki/Tools but I don’t see it mentioned anywhere on http://clojure.org#2021-05-0816:51borkdudeA new babashka release: 0.4.0: Notable additions since 0.3.0: - Support bb.edn configuration file with :paths and :deps (for including libraries managed by deps.clj and tools.deps.alpha) - Add task runner (configured in bb.edn). See docs: https://book.babashka.org/#tasks - Add Selmer and rewrite-clj to built-in libraries - Add compatibility with the https://github.com/helins/binf.cljc and https://github.com/rm-hull/jasentaa libraries - Support keyword arg parsing/passing from Clojure 1.11.0-alpha1 - All new website: https://babashka.org https://github.com/babashka/babashka/blob/master/CHANGELOG.md#040 Many thanks to the folks who helped designing the new tasks feature, a lot of discussions went on in #babashka and Github discussions to flesh out the details.#2021-05-1112:38Ertugrul CetinHi all! I’ve created a new debugging tool for re-frame 🎉. re-frame-flow is a graph-based visualization tool for re-frame event chains. Let’s assume we clicked a login button and triggered a series of events. `login-fx -> http-fx -> some-fx -> some-db-handler ...` (event after event), so a path gets generated, re-frame-flow visualizes all paths in a graph. https://github.com/ertugrulcetin/re-frame-flow#2021-05-1202:22eggsyntaxVery cool. Thanks! 👏#2021-05-1121:32uochanJust released antq ver 0.14.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Now you can exclude specific versions as follows: --exclude=foo/#2021-05-1201:37wilkerlucioPathom Viz 2021.05.11 is out! This release comes with many fixes and small improvements: - Fix trace bug when all children disappear when the root children has over 20 items - Ensure consistent background on CM6 - Show node details on snapshots - Improve performance of snapshots rendering by lazy processing the elements - Fix bug when sorting maps with irregular values - Fix bug on trace that made tooltip stay on screen - Remove node zoom on click on the graph view - Use Tailwind JIT in the app - Fix trace exceptions when trace is blank - Error boundaries around each connection and log entries You can download it at: https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.5.11#2021-05-1219:03Alex Miller (Clojure team)New release of Clojure CLI https://clojure.org/releases/tools#v1.10.3.833, just some relatively minor changes: • https://clojure.atlassian.net/browse/TDEPS-177 - Fix Maven mirrors to look up by id, not name • Remove flag when fetching git deps so that older git versions work • Tweak some warning messages • Clean up scripts to simplify variable replacement #2021-05-1219:29Michaël SalihiFYI, after install this last version I had this error on Linux:
rlwrap: error: Cannot execute /usr/local/lib/clojure/bin/clojure: No such file or directory
Look like missing the binary, I start debugging
#2021-05-1219:30Alex Miller (Clojure team)was that running clj or clojure?
#2021-05-1219:30Alex Miller (Clojure team)if the former, does the latter work?#2021-05-1219:31Michaël SalihiYes, the latter works#2021-05-1219:32Alex Miller (Clojure team)ok, I think I broke the clj script then#2021-05-1219:33Alex Miller (Clojure team)for linux#2021-05-1220:11Alex Miller (Clojure team)use 1.10.3.839 please! sorry about that#2021-05-1220:18Michaël SalihiPerfect, thanks!#2021-05-1220:08Alex Miller (Clojure team)whoopsie! that had breakage for linux users, Clojure CLI 1.10.3.839 is now available, apologies...#2021-05-1319:05Michaël SalihiJust released Inertia-clojure ver 0.2.1, Clojure middleware for Inertia.js to build single-page apps, without building an API. https://github.com/prestancedesign/inertia-clojure • This version supports History.pushState (query-string appended to URI), so the app state is loaded/restored even after direct access to a URL • Props are now optional via multi-arity render function. • Some demo examples updated#2021-05-1411:03tatutlooks like an interesting approach to SPAs, nice to have a clojure backend library for it#2021-05-1411:11Michaël SalihiThanks you. I like your approach with Ripley too. Brilliant!#2021-05-1412:09tatutthanks… as usual there’s trade offs to everything… the inertia seems interesting to me as it looks like it would help with the bad parts of SPA (routing and managing data fetched thru APIs)#2021-05-1412:10tatutbut inertia still allows you to leverage the huge ecosystem of React components#2021-05-1412:11tatutripley frees you from having to work with the JS ecosystem, but down side is that you’ll be writing a lot of basic components yourself#2021-05-1412:33Michaël SalihiTotally agree. > but inertia still allows you to leverage the huge ecosystem of React components With Inertia, React /Vue / Svelte can be now considered as advanced "template" language. For more oriented back-end profile like I am, it's very likable to manage auth, router, etc on the back. And the icing on the cake, Inertia is working on Server-side rendering.#2021-05-2523:18Michaël SalihiFYI I released a complete new web app example https://github.com/prestancedesign/clojure-inertia-pingcrm-demo#2021-05-1414:53wilkerlucioNew release for ! https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.5.13 - Now app is signed and notarized on MacOS, no need to go around gatekeeper anymore! - Pathom Viz will now auto-update - Double click on Graph View will fit the nodes, easy way to recover in case the pan/zoom gets lost#2021-05-1415:11Alex Miller (Clojure team)org.clojure/data.json 2.3.0 is now available • Fix https://clojure.atlassian.net/browse/DJSON-48: Make array parsing match spec - thanks @nbtheduke! • Fix https://clojure.atlassian.net/browse/DJSON-18: Make pprint-json much faster - thanks Nikita Prokopov for the idea+tests and @slipset for adapation into current#2021-05-1421:34Joshua SuskaloAnnouncing americano, for when you want to water down your Clojure with a little bit of Java. It provides a way to compile Java code from the Clojure CLI without code! The 1.0.0 release was just put out on Clojars. https://github.com/IGJoshua/americano#2021-05-1421:39seancorfieldThat looks really nice @U5NCUG8NR!#2021-05-1421:41Joshua SuskaloThanks! I was looking for something that could replace Badigeon or a bespoke thing in my Conditions library, and I noticed nothing else supports Java compilation by configuration, so I figured I should write it! At the moment the only thing it's lacking as far as I can tell is proper annotation support.#2021-05-1422:15ericdalloAwesome! I was thinking in creating something like that last time I had that issue, well done!#2021-05-1422:18ericdalloI'll certainly use it on clojure-lsp!#2021-05-1500:51Joshua SuskaloAwesome! I'm excited to see the results there!#2021-05-1508:20raspasovThe name rocks! 😆#2021-05-1513:32Joshua SuskaloThanks @U050KSS8M!#2021-05-1515:18ericdallolocal, It works great @U5NCUG8NR! But the CI failed, maybe related with support for java8? https://github.com/clojure-lsp/clojure-lsp/runs/2590918728#2021-05-1515:26ericdalloI opened this issue: https://github.com/IGJoshua/americano/issues/1#2021-05-1516:03Joshua SuskaloI've published 1.0.1 that includes a hotfix for this issue!#2021-05-1508:13raspasovSince this question comes up pretty often, I made cljs-101:#2021-05-1509:17yuhanThat's really convenient! Is the user intended to clone the repo supposed or simply copy the clj shell invocation? If it's the former, why not include an alias in a deps.edn and simply call clj -M:node#2021-05-1510:03raspasovYou can have the deps.edn also 🙂 I just wanted “the least number of files”. I wanted to demystify the starting of a REPL. If you put it behind an alias, you then need to teach people what an alias is in the context of deps.edn 🙂 Which can be useful but is not critical to get going.#2021-05-1510:07raspasovNot really clone, there’s literally nothing to clone! 🙂 It’s just one line command.#2021-05-1510:19yuhanYup, that's what I gathered, but the Readme and example code made it seem like it should be invoked from the project folder#2021-05-1510:24yuhanI also didn't realise the CLI tool implicitly adds "src/" to the classpath from wherever it was invoked, even when there's no deps.edn file - just small things that may be confusing to beginners#2021-05-1511:00borkdudeI've been doing it like clj -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.597"}}}' -M -m cljs.main -re node since a few years#2021-05-1518:20henryw374I suppose this says something about the sorry state of http://clojurescript.org#2021-05-1521:35seancorfield@UCPS050BV The CLI itself can tell you that:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "116274707f72515554425a455e413c22215852502627"}, :content ("[email protected]")}
No deps.edn file there, but src is on the path.
#2021-05-1508:13raspasovhttps://github.com/raspasov/cljs-101#2021-05-1513:41littleliI reported the first... not a bug, rather a report.#2021-05-1513:52raspasovHa! 🙂 Thanks. Sorry, I haven’t seen a Windows for years. So it works… after you run it twice?#2021-05-1514:43littleliNo 🙂 there is a problem with escaping. Check the backslash \ before double quote "#2021-05-1514:44littleliEscaping work differently under Windows unfortunately. So the command has to look a bit different which I wanted to demonstrate in the issue description.#2021-05-1515:15raspasovAha! Got it. Merged 👍#2021-05-1515:15raspasovThank you!#2021-05-1515:35littleliSure thing. Great small project!#2021-05-1618:42hlshipio.aviso/pretty 1.0 is now available Pretty is a library for printing things prettily in Clojure; primarily, formatting exceptions for quick and easy comprehension. GitHub: https://github.com/AvisoNovate/pretty Documentation: https://ioavisopretty.readthedocs.io/en/v1.0/ Pretty hasn’t changed much in the last couple of years, but with over 6 million downloads, it is quite widely used. The 1.0 release ties up a couple of loose ends; by setting a 1.0 release, we would hope that other tools that make use of older versions of Pretty will upgrade to this stable release.#2021-05-1702:38hlshipio.aviso/pretty 1.1 is now available Restored compatibility with Clojure 1.7.0.#2021-05-1809:01Ertugrul Cetinhttps://github.com/ertugrulcetin/re-frame-flow 0.1.4 is now available. (Graph-based visualization tool for Re-frame event chains) • Changed ◦ Show nested routes on hover node ◦ Edge type changed to default one (Bezier curve) ◦ No need to declare `(re-flow/clear-cache!)`, it's automatically called on `:dev/after-load` • Added ◦ dispatch and `dispatch-sync` trace support • Fixed ◦ Tolerate `nil` inside `dispatch-n` #2021-05-1815:03Joshua Suskalohttps://github.com/IGJoshua/farolero version 1.1.0 is now available, including a full test suite and support for CLJS, and a way to specify how warnings are displayed#2021-05-1815:25borkdudeFriendly periodic reminder that there is also a #releases channel for minor updates#2021-05-1820:14dominicmWhilst disproportionate remember: • #announcements is default, and many of those 14500 aren't active. You're not actually "reaching" 14500 people • The audience for #releases is smaller, that's why it's separate.#2021-05-1820:59Michaël SalihiThanks you for the clarification. I am withdrawing my message, it also appears in the main thread and it's irrelevant.#2021-05-1816:13Jacob O'BryantJust finished a major update for Biff, a batteries-included web framework (https://biff.findka.com, repo: https://github.com/jacobobryant/biff). It ended up being almost a complete rewrite. It's much simpler, easier, and more production-ready now. More details on the reddit post: https://www.reddit.com/r/Clojure/comments/nfemnf/just_finished_a_biff_rewrite_batteriesincluded/#2021-05-1918:32Alex Miller (Clojure team)org.clojure/data.json 2.3.1 is now available * Fix [DJSON-51]: Fix possible read of x00's in quoted strings on partial buffer read#2021-05-2015:58blueberryDeep Diamond 0.20.3 released. The Clojure tensor and deep learning library. https://github.com/uncomplicate/deep-diamond#2021-05-2114:39Jakub Holý (HolyJak)Tired of being forced to use the browser every time you need to refresh an OIDC token to authenticate with a backend service? Finally there is a CLI tool for that - the #babashka and Docker powered oidc_client.clj https://gist.github.com/holyjak/ad4e1e9b863f8ed57ef0cb6ac6b30494 Upon first invocation it opens up a browser for the OIDC provider login, thereafter it caches the refresh token and uses it as long as it remains valid.#2021-05-2114:40Jakub Holý (HolyJak)@U04V15CAJ feel free to copy this if you want to add it to the bb examples/#2021-05-2115:43borkdudeLooking good! I think we can add it to https://github.com/babashka/babashka/blob/master/doc/projects.md PR welcome#2021-05-2118:31Ivar RefsdalLooks good! Have you considered using - or recommending - mkcert for trusting self signed certs? It has worked effortlessly for me. https://github.com/FiloSottile/mkcert/#2021-05-2317:34Jakub Holý (HolyJak)Thx, @UGJE0MM0W, mkcert looks great!#2021-05-2115:38plexusFirst release of com.lambdaisland/dom-types https://github.com/lambdaisland/dom-types This is a ClojureScript library which adds print handlers for a bunch of built-in browser types, which generally makes working with them in the REPL much more pleasant. e.g. instead of #object[object HTMLElement] you'll get #js/Element [:p "hello world]. This also extends Datafiable to these types (great with Portal).#2021-05-2116:31Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.3.849 is now available • Adds support for a https://clojure.org/reference/deps_and_cli#_trailing_map_argument in -X calls (similar to Clojure 1.11 trailing map to vararg calls) • Updates all Maven deps to latest (maven-resolver 1.7.0, maven core 1.8.3) to address these https://maven.apache.org/docs/3.8.1/release-notes.html ◦ CVE-2020-13956 - bumps deps on Apache HttpClient used by Maven ◦ CVE-2021-26291 - potential security problems regarding Maven repositories: ▪︎ Due to the possibility of MITM (man in the middle) attacks, http repo access is now blocked by default. tools.deps/Clojure CLI has always used https repos in the default repository list (central and clojars), so this mostly impacts any explicit http repositories defined in deps.edn ▪︎ Concerns over the "hijacking" of repository urls by transitive pom deps (or their super poms) to download artifacts from malicious repos. Maven made no changes here, but did clarify how repos are resolved on https://maven.apache.org/guides/mini/guide-multiple-repositories.html#repository-order. From a deps perspective, we only use repositories declared in the top-level deps.edn (if transitive deps need a custom repo, you will need to add it at top-level too). For tools.deps use of pom dependencies, we are providing the repos of the top deps.edn file (which should always put Maven Central and Clojars first), then deferring to Maven for the rest.#2021-05-2416:45match37The link for "trailing map of kvs" is broken#2021-05-2417:19Alex Miller (Clojure team)fixed#2021-05-2119:34Alex Miller (Clojure team)https://github.com/cognitect-labs/test-runner v0.3.0 is available • Fixes #17 - use default ns regex only if no specific namespaces or regexes are supplied#2021-05-2417:57seancorfield@U064X3EF3 I just ran into the newly-introduced bug in the api -X runner — and saw someone already opened an issue for that.#2021-05-2418:06Alex Miller (Clojure team)wat#2021-05-2418:10Alex Miller (Clojure team)ok, fixed#2021-05-2418:10Alex Miller (Clojure team)I must have changed the docstring after I ran the tests? don't remember#2021-05-2418:19seancorfieldI commented on the commit that introduced the bug, if that helps 🙂#2021-05-2216:11borkdudeBabashka SQL pods 0.0.8 - Now also available on Windows! - The Oracle and MySQL drivers are now available from the pod registry https://github.com/babashka/babashka-sql-pods https://github.com/babashka/pod-registry Babashka SQL pods let you access databases from babashka scripts via the next.jdbc API.#2021-05-2302:50ivanaHello! I created yet another VS Code plugin for Clojure - https://github.com/Ivana-/bb-clj  Source code & installation VSIX are avaliable, feel free to try it!#2021-05-2316:07ivanaI was just informed, that bb abbreviation is already strong associated with babashka project, so I added spesial comment to readme
Please, don't be confused if 'bb' reminds you the babashka project - it's just a coincidence, abbreviation for bare-bones
#2021-05-2321:08borkdudeFYI: the association is there because the command line tool is called bb and also the config file: bb.edn.#2021-05-2310:56borkdudeUse ClojureScript (interpreted by SCI) directly in an HTML <script> tag. https://github.com/borkdude/sci-script-tag https://borkdude.github.io/sci-script-tag/ Experimental, feedback welcome.#2021-05-2311:16pezTotally awesome. #2021-05-2314:37borkdudeNow also with Reagent plugin: https://borkdude.github.io/sci-script-tag/#reagent#2021-05-2314:48pezCan I put the script in a cljs file and include with something like
<script src="hello_world.cljs" type="application/x-sci"></script>
#2021-05-2314:49borkdudehmm, not sure how that can be implemented yet, interesting#2021-05-2314:50borkdudemaybe it already works? not sure ;)#2021-05-2314:57borkdudeit seems there is a hack needed for this#2021-05-2315:03pezI should have tried myself, but am in the middle of something and mainly letting myself be distracted by this new cool thing of yours.#2021-05-2315:13borkdude@U0ETXRFEW I am pushing a new commit which supports this#2021-05-2315:14borkdudenote that SCI doesn't support all of CLJS so don't expect a random CLJS project to work, but you should be able to put snippets in there which are supported#2021-05-2315:16borkdudeok works now#2021-05-2315:17pezHaha, you amaze me!#2021-05-2315:23pezSo, when working with an SPA project where we shared a lot of code between backend and frontend and where we server side rendered the SPA entry pages which when rendered in the browser “became” the SPA, there was still one thing I couldn’t solve. We had this quite involved business logic that powered a calculator on the web page. We had the same business logic used in the backend. While the SPA was being loaded and started, the calculator didn’t work. I’m looking at this script tag you’ve made and wondering if maybe it could be used for server side rendering fully functional pages. Don’t know if I am making sense, but anyway. (And, yes, I heard you about “not all CLJS”, even if I am reading in a “yet” there 😄.)#2021-05-2315:24borkdudehttps://borkdude.github.io/sci-script-tag/#src#2021-05-2315:26pezI might experiment with what I just rambled about and see if it could be true.#2021-05-2315:27borkdudeI would be surprised ;)#2021-05-2406:06kardanI had this project laying around for a long time. It came in my mind after talks about variants and issues we at the time had at work. I packaged it together and “released” something a bit more cleaner than what it was earlier. In my mind it could fit well in a system of micro services or could be used as part of a data pipeline. Anyway, enough “ramblings”. Let me introduce Taxa - a thought experiment in hierarchical domain logic for Clojure & ClojureScript. https://github.com/kardan/taxa#2021-05-2520:46Michaël SalihiHi, I recently developed https://github.com/prestancedesign/inertia-clojure a Clojure adapter for http://Inertia.to to create SPA applications without writing an API. Here is the porting of the original Ping CRM complete demo written in Laravel/PHP to Clojure Ring, Integrant, Reitit and next.jdbc: https://github.com/prestancedesign/clojure-inertia-pingcrm-demo All features and page are done: • Session authentication login/logout • Users, Organizations, Contacts pages • Advanced filters (search input, with/without trashed items) • Pagination • Delete /restore items • Input form validation To try it, simply clone the repo and run: clj -M:run Feedbacks welcome!#2021-05-2620:42Michaël SalihiI just put online the demo https://inertia.prestance-design.com#2021-06-0711:43tvaughanI just came across https://github.com/blitz-js/blitz. Thought you might be interested @UFBL6R4P3#2021-06-0718:57Michaël SalihiThanks @U0P7ZBZCK, I'll check this!#2021-05-2620:42Michaël SalihiI just put online the demo https://inertia.prestance-design.com#2021-05-2617:52pezIn Calva 2.0.198 we add two standalone ClojureScript Quick Start REPL commands. One for browser ClojureScript and one for node. This makes it as easy to try out editor-connected ClojureScript as it is for Clojure. I’m attaching a super short video where I demo the feature while it was in development, but the released feature looks pretty much the same. https://calva.io/getting-started/#there-are-standalone-clojurescript-quick-start-repls#2021-05-2622:36practicalli-johnhttps://github.com/practicalli/clojure-deps-edn updated with newest library versions using :project/outdated alias which runs antq New aliases added • :format/zprint - format Clojure code and Edn data structures • :project/depify - generate a Clojure CLI deps.edn configuration from Leiningen project.clj#2021-05-2908:00niwinzhttps://github.com/funcool/cuerdas/blob/master/CHANGES.md#version-20210529-0 Important release of funcool/cuerdas: removes the xregexp dependency and becomes a 0 external dependency library, reducing considerable the js bundle size.#2021-05-2919:08roklenarcicMy Memento library now has a Redis-backed caching implementation as a companion library: https://github.com/RokLenarcic/memento-redis#2021-05-2923:11marciolHi all. I just ported the awesome @borkdude spartan.spec to ClojErl (from @jfacorro). I started an effort to port some libraries and this is the first. https://github.com/marciol/spartan.spec#2021-05-3100:12wilkerlucioHello everyone! I have some updates on the development of Pathom 3 to do share. Improvements to error handling, a new strategy for graph optimizations and the start of getting distributed query processing. Check it out at https://blog.wsscode.com/pathom-updates-10/#2021-06-0221:10uochanJust released antq ver 0.15.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Now offers a Leiningen plugin as a more accurate way to check dependencies for Leiningen projects. Thanks a lot @vemv !#2021-06-0322:14mike_ananevAlpha version of PlantUML wrapper for Gantt diagrams. https://github.com/redstarssystems/gantt#2021-06-0403:39Alex Miller (Clojure team)The StackOverflow 2021 survey is open and they have re-included Clojure this year! A great opportunity to make our representation known... https://stackoverflow.com/dev-survey/start#2021-06-0407:14raspasovI filled it out 👍#2021-06-0417:51bringeCalva version 2.0.199 is out with an improvement to the debugger call stack. Additional stack frames are now shown in VS Code's call stack view during a debug session and some can be clicked to navigate to the relevant line of code. See a https://calva.io/debugger/#viewing-the-call-stack.#2021-06-0421:46Sam RitchieI’ve just released v0.19.0 of the #sicmutils computer algebra system! This release adds a bunch of performance improvements, speeding up simplification by up to 60x for more complicated problems. The whole library is much zippier. Specific additions: • a powerful, extensible https://github.com/sicmutils/sicmutils/blob/master/src/pattern/rule.cljc with a huge number of simplifier rules built-in. The design is based on the pattern matcher in Gerald Sussman’“s https://amzn.to/34PU3h6”, but designed for Clojure vs MIT Scheme. • high-performance multivariate https://github.com/sicmutils/sicmutils/blob/master/src/sicmutils/polynomial.cljc and https://github.com/sicmutils/sicmutils/blob/master/src/sicmutils/rational_function.cljc implementations • slimmer build, and features like a-la-carte simplification and expression factoring Clojars: https://clojars.org/sicmutils/sicmutils detailed release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.19.0 cljdoc: https://cljdoc.org/d/sicmutils/sicmutils/0.19.0 Cheers!#2021-06-0612:12Jakub Holý (HolyJak)It would be nice to have a textual explanation and few examples for the patter matching. Reading the multiple ns isn't so simple 🙏#2021-06-0714:16Sam Ritchie@U0522TWDA yup, lots to do! the pattern matcher is in service of symbolic expression simplification, so even though it’s a pretty big project on its own I’m having to prioritize how deep I can go on this first pass#2021-06-0714:18Sam Ritchie@U0522TWDA but I am happy to point at lots of examples from the namespaces and tests!
(let [r (rule (+ ?x ?x) => (* 2 ?x))]
  (r '(+ z z)))
#2021-06-0714:23Sam Ritchiea short tour: • the “rule” macro is the main thing: https://cljdoc.org/d/sicmutils/sicmutils/0.19.0/api/pattern.rule#rule • the “syntax” namespace defines most what you can include in the matching part, ie, the first form you pass to rule: https://github.com/sicmutils/sicmutils/blob/master/src/pattern/syntax.cljc#L25 • the form is “(rule <pattern> <predicate> <template>)“, all explained in the rule docs. => is a function that just always returns true. • the rule has a bunch of “combinators” that let you do things like, take a rule, and return a NEW rule that tries to apply its rule to every nested form, bottom up, in a nested data structure… and lots more stuff. Here’s an example of a macro called ruleset that takes LOTS of rule forms, and tries each one down the list; the whole rule returns on the first match, and if none match, it returns its input.
(ruleset
 (sin (asin ?x)) => ?x
 (cos (acos ?x)) => ?x
 (tan (atan ?x)) => ?x
 (sin (acos ?x)) => (sqrt (- 1 (expt ?x 2)))
 (cos (asin ?y)) => (sqrt (- 1 (expt ?y 2)))
 (tan (asin ?y)) => (/ ?y (sqrt (- 1 (expt ?y 2))))
 (tan (acos ?x)) => (/ (sqrt (- 1 (expt ?x 2))) ?x))
#2021-06-0714:34Sam Ritchiemaybe a more fun example, these two are equivalent, and I WOULD ARGUE that the second is clearer:
(defn- mul [a b]
  (cond (and (v/number? a) (v/number? b)) (g/mul a b)
        (v/number? a) (cond (v/zero? a) a
                            (v/one? a) b
                            (product? b) `(~'* ~a 
#2021-06-0714:43Sam Ritchiehttps://twitter.com/sritchie/status/1401912537147490306#2021-06-0715:17Jakub Holý (HolyJak)thanks a lot! it is much clearer already! 🙂 Examples help a lot.#2021-06-0717:29Sam Ritchietotally! there are a ton more in the tests: https://github.com/sicmutils/sicmutils/blob/master/test/pattern/rule_test.cljc#2021-06-0717:30Sam Ritchieand then a huge number of rules, organized not-terribly-well, in https://github.com/sicmutils/sicmutils/blob/master/src/sicmutils/simplify/rules.cljc#L275. These are all from the original scmutils library; a goal of mine is to organize these into clear buckets, then publish them separate from this library so anyone wanting to deal with mathematical expressions can have a huge set to choose from#2021-06-0607:57Ben SlessJust release v0.0.10 of https://github.com/bsless/clj-fast with a bunch of improvements and extra features • even faster merge • faster (r)subseq • variadic arity assoc-in which emits minimal code Clojars: https://clojars.org/bsless/clj-fast Release notes: https://github.com/bsless/clj-fast/releases/tag/v.0.0.10 Cljdoc: https://cljdoc.org/d/bsless/clj-fast/0.0.10/doc/readme#2021-06-0709:36Adam HelinsIt is not always easy writing a CLJC library, having to handle both Clojure and Clojurescript. So here is a little template that might help you: https://github.com/helins/templ-lib.cljc Not saying that it is perfect (it isn't), but you might get some inspiration 🙂#2021-06-0709:45Adam HelinsHappy to take PRs though, if there are obvious improvements that can benefit everyone#2021-06-0710:30pezGreat! I am one that looks for templates when I am about to do something new. Last time I made a cljc library, I noticed the lack for templates here. 😀#2021-06-0721:26vemvhaving authored similarly focused templates, one thing I'd recommend is to template the CI integration as well. Especially featuring a comprehensive test matrix#2021-06-1014:08Adam Helins@U45T93RA6 Quite right! Although I am not sure if it should be part of the template itself. I often disliked templates where you have to spend some time removing everything you don't want. So for the time being at least I've added it to an "extra" folder in the repo.#2021-06-0710:03Adam Helinstest.check is a wonderful tool. It helps me find edge cases even in very simple, dumb assertions. For any non-trivial example, it is a bliss. However, from experience, it is often hard locating precisely what make a test fails in any non-trivial example. I hope this couple of lightweight abstractions will help you as much as they helped me in organizing your generative tests and being highly productive: https://github.com/helins/mprop.cljc#2021-06-0710:14imreThis looks interesting. Would it make sense to add an example or two about how failing test output compares to when multiplexing isn't used?#2021-06-0819:38Jakub Holý (HolyJak)A typo in the Readme :effictive#2021-06-1014:32Adam Helins@U08BJGV6E Indeed, it was maybe too abstract. I added outputs in README, hopefully it's clearer#2021-06-1014:33imrenice one#2021-06-0710:55Karol WójcikDuring the weekend I've made a really simple text-to-speech application which demonstrates the power of holy-lambda, AWS Polly, babashka runtime and scittle. Hope you will like it guys. Demo: https://youtube.com/watch?v=XJc6xma7v0Ahttps://t.co/uQ0JlE0N0p?amp=1 Project: https://github.com/FieryCod/holy-lambda/tree/master/examples/bb/babashka/talk-with-babashkahttps://t.co/vsFHiGVkU8?amp=1#2021-06-0712:54Mathieu CorbinI'm happy to announce a new release of Mirabelle (https://github.com/mcorbin/mirabelle), a stream processing engine for monitoring heavily inspired by Riemann (http://riemann.io). I also wrote recently a documentation website for it (https://www.mirabelle.mcorbin.fr/), and published today an article about how I use it for blackbox monitoring (https://www.mcorbin.fr/posts/2021-06-07-mirabelle-cabourotte-blackbox/). As always, i'm open for feedbacks 😉#2021-06-0820:23Jakub Holý (HolyJak)Mirabelle use the same protocol than Riemann. - should be "as"? Streams clocks -> Streams' clocks?#2021-06-0920:59Michaël SalihiThat's it! The Reagent frontend of inertia Ping CRM Clojure / ClojureScript port is 100% done! • Online demo updated and it's very fluid: https://inertia.prestance-design.com • Complete backend + frontend source code: https://github.com/prestancedesign/pingcrm-clojure#2021-06-1006:30rakyiCool stuff! Although, 3.2 MB of CSS is a lot. JS bundle is also quite big for what it does. Is that because of Inertia?#2021-06-1006:42Michaël SalihiThanks for your feedback! Optimization was not my priority until now. Writing the back and front end was time consuming knowing that I also had to write this library https://github.com/prestancedesign/inertia-clojure to make Inertia works with Clojure. Configuring PostCSS + Tailwind purge will fix the file size concern, this is the next and current step. Stay tuned!#2021-06-1007:47tatutreally nice#2021-06-1008:20Michaël SalihiThanks @U11SJ6Q0K!#2021-06-1009:22tatut
<body class="font-sans leading-none text-gray-700 antialiased">
    <div data-page="{&quot;component&quot;:&quot;Organizations/Index&quot;,&quot;props&quot;:{&quot;organizations&quot;:{&quot;data&quot;:[{&quot;postal_code&quot;:&quot;18808-dfgf&quot;,&quot;address&quot;:&quot;36196 Fritz Plaza Suite 984&quot;,&quot;email&quot;:&quot;
this was surprising to me, I would’ve thought that there is a length limit in data attributes, but apparently in html5 there is no limit
#2021-06-1010:06Michaël SalihiExactly, no limiit. However to take into consideration, the browser history state limit even if it is wide: https://inertiajs.com/responses#maximum-response-size#2021-06-1010:13Michaël SalihiNote that the server-side rendering is coming, it's only in early access for sponsors for the moment. I have access to it so it's the next step I'm going to have fun on. 🙂#2021-06-1010:14Michaël SalihiThe SSR demo: https://ssr-demo.inertiajs.com/#2021-06-1010:18tatutthat’s running React on the backend to render it, I assume#2021-06-1010:39Michaël SalihiYes, there is also solutions for Vue and Svelte too. https://inertiajs.com/server-side-rendering#2021-06-1015:40Michaël Salihi@U751SU53R > Although, 3.2 MB of CSS is a lot. FYI The repo contains now the PostCSS and Tailwind setup! The CSS size is drop to 7,22 Kb Gziped (27,46 Kb)#2021-06-1015:40Michaël Salihihttps://github.com/prestancedesign/pingcrm-clojure/commit/703bbb60d87303ea0b67c0b386c7e5dd347f88e0#2021-06-1015:56rakyiNice! Curious how much Inertia increases the JS (or CSS) bundle size by itself. Do you happen to know? Can’t find it in their docs.#2021-06-1018:39Michaël SalihiInertia is not responsible and therefore has no impact on the CSS.#2021-06-1018:43Michaël SalihiHere, you can check a report build with npx shadow-cljs run shadow.cljs.build-report: https://inertia.prestance-design.com/js/report.html Compared to the values on this site, the bundle sizes match: • https://bundlephobia.com/package/@inertiajs/inertia@0.9.2https://bundlephobia.com/package/@inertiajs/inertia-react@0.6.2#2021-06-1012:35Ivar RefsdalI'm pleased to announce recurring-cup, a simple scheduler for daily/weekly occurrences that supports timezones. Schedules are represented using Clojure seqs, and thus you may tweak them using standard filter, remove, etc. should you so like. It's built on top of the excellent tea-time. https://github.com/ivarref/recurring-cup#2021-06-1014:08chrisnOur high performance data processing system, https://github.com/techascent/tech.ml.dataset is out of beta and has reached version 6.00! It was quite a long beta but the system has been quite stable for a while. tmd allows you to process very large datasets interactively at the repl in a DataFrame style like Pandas or R's data.table. It performs https://github.com/zero-one-group/geni-performance-benchmark/ than any of the comparative options and was written from the ground up in Clojure. • Checkout my talk about https://www.youtube.com/watch?v=5mUGu4RlwKE. • For more Clojure data science-centered work checkout the https://scicloj.github.io/pages/libraries/ and especially https://github.com/scicloj/metamorph. There is a lot of great stuff there! • If you are looking just for great mathematics https://github.com/generateme/fastmath#content most of R's core mathematical library. P.S. - as Alex posted above, if you haven't filled out the Stack Overflow https://stackoverflow.com/dev-survey/start, please do so! It really helps us all out.#2021-06-1115:12Tamizhvendan SHi folks, I just published a new version of https://cljdoc.org/d/org.graphqlize/honeyeql/0.1.0-alpha36/doc/readme after a one-year break. This new version adds support for https://cljdoc.org/d/org.graphqlize/honeyeql/0.1.0-alpha36/doc/aggregate-queries & https://cljdoc.org/d/org.graphqlize/honeyeql/0.1.0-alpha36/doc/attributes#one-to-one relationships. I've also added documentation for https://cljdoc.org/d/org.graphqlize/honeyeql/0.1.0-alpha36/doc/debugging-troubleshooting.#2021-06-1116:04seancorfieldExpectations — an expressive, clojure.test-compatible testing library — has a prerelease of 2.0.0 available: https://cljdoc.org/d/com.github.seancorfield/expectations/2.0.0-alpha2/doc/readme — the main changes from the previous version (1.2.1) are: - improve “drop-in” compatibility with clojure.test (by re-exporting several clojure.test features so you don’t need to require that as well as Expectations) - provide cljs.test-style fixtures (hash map with :before and :after functions) in addition to the regular clojure.test fixtures - provide standalone (self-hosted) ClojureScript compatibility (via planck, thanks to @kkinear) — previously, Expectations was Clojure-only - moves to com.github.seancorfield/expectations (formerly expectations/clojure-test) Follow-up in #expectations for specifics or #testing for general stuff.#2021-06-1123:20Cam SaulOut of curiosity, are you still using Expectations yourself? We recently finished migrating ~60k lines of expectations-based tests in Metabase to clojure.test earlier this year, mostly because there's better tooling around it. This was easy to accomplish piecemeal by writing removing the dependency on expectations and writing (expect ...) https://github.com/metabase/metabase/blob/release-x.38.x/test/expectations.cljthat expanded out to a
(deftest some-name-based-on-test-hash
  (expect= expected actual))
and then defining a clojure.test/assert-expr impl for expect= . The main reason I'm asking is it looks like the migration path from expectations 1 -> expectations 2 seems like it would be about the same amount of work as migrating directly over to clojure.test . So if I were to convert another project using Expectations 1 (I still have a few around actually), would it really make sense to convert it to Expectations 2 instead of just converting it to clojure.test?
#2021-06-1200:04seancorfield@U42REFCKA This is not the original Expectations. This is the clojure.test-compatible version. All of the clojure.test tooling works with this version of Expectations.#2021-06-1200:05seancorfieldlein test, Cursive’s test runner, Polylith’s test runner, Cognitect’s test-runner all work with this. And you can mix’n’match “old school” clojure.test assertions and the more expressive expect expressions.#2021-06-1200:06seancorfield“it looks like the migration path from expectations 1 -> expectations 2 seems like it would be about the same amount of work as migrating directly over to `clojure.test`.” — not sure what gives you that impression? Did you actually check out the docs?#2021-06-1200:07seancorfield(and, yes, we use this version of Expectations very heavily at World Singles Networks with standard clojure.test runnners)#2021-06-1200:14Cam SaulRight, I understand that. It just seems like the main benefit of upgrading from the class Expectations lib -> Expectations 2 is that is uses clojure.test under the hood, but with the syntax changes it seems you'd have to rewrite everything either way. Example: a classic Expectations test might look like
(expect
 1000
 (inc 999))
I could rewrite that as clojure.test as
(deftest my-test
  (is (= 1000
         (inc 999)))
or as
(defexpect my-test
  (expect 1000
          (inc 999)))
the effort involved in migrating such a test seems roughly equivalent. For a few cases where Expectations has different semantics, you could just write your own assert-expr that behaves the same way as Expectations used to, e.g. for comparison against regexes or Exception classes, so for converting several hundred or thousand tests it wouldn't make a huge difference.
#2021-06-1200:17seancorfieldWe switched from (classic) Expectations to the clojure.test-compatible version that I developed ages ago. This is the 2.0 version of that library. Migrating to the clojure.test-compatible version was simply a matter of wrapping each namespace’s set of (expect ..) forms in a single (deftest some-name ..) form.#2021-06-1200:18Cam SaulGotcha. I'm just trying to understand (as the maintainer of a few libraries that still use classic expectations-style tests) if migrating to this Expectations 2 lib would be easier than migrating to clojure.test . And whether this Expectations 2 lib is intended more as a stepping stone to eventually migrating to clojure.test entirely or not#2021-06-1200:19seancorfieldNo, you don’t need to migrate to clojure.test. Just wrap (deftest some-name ..) around a big group of (expect ..) forms, and switch from the old Expectations require to this new one. It’s a trivial migration, and can be done one ns at a time.#2021-06-1200:20seancorfield(that’s how we migrated)#2021-06-1200:22Cam Saulok, gotcha. that makes sense. thanks#2021-06-1200:22seancorfieldThe README link I posted explains why this version exists and what the differences are from the “classic” Expectations. And shows a mix’n’match example:
(deftest mixed
  (is (= 2 (+ 1 1)))
  (expect even? (+ 1 1)))
#2021-06-1200:24seancorfieldWe’ve been using this version for about two and a half years at work. Happy to help you migrate any of your existing libraries from “classic” Expectations to this version — so you get to keep all your expect forms, and just wrap them in named tests 🙂#2021-06-1200:25seancorfieldI created it because “classic” Expectations needed custom tooling and did not work with CIDER or Cursive 🙂#2021-06-1200:26seancorfieldAnd you can (expect ::some-spec (my-fn 1 2 3)) so you get Spec support built-in, which I’m pretty sure did not exist in the “classic” version…#2021-06-1200:34Cam SaulGotcha. One more question. IIRC I took a look at the 1.x version of your lib at one point but the semantics were a little different from the old Expectations lib, so it wasn't directly compatible. For example,
(expect
 (re-pattern "\\d+")
 "1000")
passes in "classic" Expectations, but in the new lib it doesn't (or at least didn't) because it's macro-based and the expected form isn't a regular expression yet at macroexpansion time. I don't know if that's been fixed or not yet, but at a glance it still looks like you'd run into the same thing https://github.com/clojure-expectations/clojure-test/blob/develop/src/expectations/clojure/test.cljc#L381
#2021-06-1200:42Cam SaulIs maintaining the same exact semantics as legacy Expectations a project goal? Or is the expectation (pun intended) that a few tests here and there will have to be rewritten?#2021-06-1200:53seancorfieldI would consider that a bug, if it worked in “classic” Expectations and not in the clojure.test-compatible version.#2021-06-1200:55seancorfieldAlthough (re-find #"\\d+" "123") => nil so I don’t think that expectation would pass either?#2021-06-1200:56Cam Saul
(re-pattern "\\d+") -> #"\d+"
#2021-06-1200:57Cam Saulthe escaped slash gets unescaped#2021-06-1201:08Cam SaulI just double-checked, and
(expect
 (re-pattern "\\d+")
 "123")
definitely passes on old-school legacy classic traditional Expectations. I think there were a few other related test failures I ran in to last time I tried it. For example in Metabase we had a lot of places where we wrote tests that ran against different databases (e.g. Postgres/MySQL/H2/Oracle/SQL Server/etc.) depending on which CI node we were on e.g.
(expect
 (if (testing-some-completely-broken-database?)
   some-form
   some-other-form)
 do-something)
I think basically anywhere where the expected form has any sort of logic doesn't work with the macro-based expect approach. I ended up just writing an assert-expr method that does appropriate comparisons/assertions after the expected form is evaled
#2021-06-1116:20jmvHi all, wanted to share https://github.com/nytimes/vase.elasticsearch This adds Elasticsearch bindings to Vase so that you can build out simple search systems in a data-driven manner. We currently use it to power the NYT cooking search as well as some internal search systems.#2021-06-1121:19Oliver GeorgeSounds interesting. Would you mind giving us the elevator pitch? For the initiated…#2021-06-1210:30vemvI'm a (positively) surprised Vase is still in use, I thought it had lost traction :)#2021-06-1417:10jmv@U055DUUFS sure! this follows on the same basic premise as https://github.com/cognitect-labs/vase/blob/master/docs/design.md: a concise way to specify simple microservices for some business need. this library extends vase to add support for elasticsearch so that you can add search to a microservice or make a full search oriented microservice. we use this internally so that small teams can spin up search for their product without having to have deep knowledge about running the entirety of a search system. so we take care of the infra and the data sources and let product teams create these concise specifications of search for their business domain#2021-06-1117:50Luis Thiam-NyeInitial public release of snoop — use malli schemas to instrument functions and validate inputs & outputs at runtime. • Compatible with both Clojure and ClojureScript • Convenient schema notation or use m/=> • Works with multi-arity functions • Configuration options for runtime and compile-time • Uses a custom defn wrapper macro that hopes to be easier to combine with other defn wrappers • Alpha I've found instrumentation to be very helpful in tracking down errors in data-heavy situations. https://github.com/CrypticButter/snoop#2021-06-1118:43ikitommiAdded link to malli README. Congrats on the release!#2021-06-1209:31borkdudeJust out of curiosity, is there a reason why such functionality isn't included in malli itself yet? Future plans? @U055NJ5CC#2021-06-1211:47ikitommithere are at least 4 different flavours of schematized defn macros in the wild and Rich is doing/thinking something new for this. Don't wont to make any one standard now. All anyway share m=> machinery, all contribute to same registry, get clj-kondo for free etc. The Plumatic-style will be an optional part of malli, as I like the most 😎#2021-06-1211:48borkdude:)#2021-06-1513:08Luis Thiam-NyeI've updated the library to allow specifying schemas next to each parameter declaration, like you can with Plumatic. Personally, I'm not terribly keen on peppering the params vector with :- and commas, so I decided on lists instead:
(>defn fun
  [(x int?) (y int?) (z melon?)]
  [=> string?]
  ...)
https://github.com/CrypticButter/snoop#inline-schema
#2021-06-1513:09borkdude@U016JRE24NL One benefit of using the Schema notation would be that the syntax is supported out of the box with clj-kondo :)#2021-06-1513:12Luis Thiam-Nye@U04V15CAJ I provided a clj-kondo config export in the repository 👍.#2021-06-1513:12borkdudeah that works too :)#2021-06-1513:12borkdudelooks good! https://github.com/CrypticButter/snoop/blob/main/resources/clj-kondo.exports/com.crypticbutter/snoop/clj_kondo/crypticbutter/snoop.clj#2021-06-1215:04borkdudeThe first release of scittle is available (v0.0.1), hosted on JSDelivr: https://github.com/borkdude/scittle/releases/tag/v0.0.1 Scittle lets you evaluate ClojureScript programs in script tags, without setting up a CLJS project, via the Small Clojure Interpreter. New since the first commit: - Reagent plugin - CLJS-Ajax plugin Usage: https://borkdude.github.io/scittle Also check out this all new full stack luminus guestbook example: https://github.com/kloimhardt/babashka-scittle-guestbook#2021-06-1215:35seancorfieldThis is just… sorcery! wizard#2021-06-1217:32henrikSCI is eating the world#2021-06-1217:40natesorsciry#2021-06-1218:13eccentric JVery cool!#2021-06-1223:03bherrmanninconceivable#2021-06-1302:23nateinconscivable#2021-06-1305:58Adam HelinsHave... to go... further... Can SCI run SCI? 😂#2021-06-1413:55eggsyntaxWheeeee! awesome#2021-06-1412:10Divya PatelHey guys! Here is an interesting opportunity for all women coders to win prizes up to Rs. 20 Lakh with their coding acumen. http://Monster.com has come up with 'Technodiva', a coding contest exclusively for women. For registering, please go to the following link :- Register here for more detail: https://bit.ly/2RUDbTu#2021-06-1412:13pezThis is not a project/library announcement so it doesn’t fit here. Unless it has Clojure relevance I don’t think where it would fit, actually. Maybe in #off-topic. Deleting.#2021-06-1417:37ericdalloclojure-lsp Released new https://clojure-lsp.github.io/clojure-lsp/ version with a huge improvement on source-paths discovery for deps.edn projects behaving pretty similar to Cursive 🎉 This should make clojure-lsp works well for mono-repo and polylith projects 😄 For more information, please come to #lsp!#2021-06-1605:29tony.kayFulcro 3.5.0-RC1 is now available on clojars: https://github.com/fulcrologic/fulcro This release adds wider support for using Fulcro's data management facilities (networking, normalization, etc.) in non-React apps, includes wider support for using Fulcro via raw React hooks, and also includes facilities for more easily dynamically generating normalizing components via pure data at runtime.#2021-06-1705:54seancorfieldcom.github.seancorfield/next.jdbc "1.2.674"https://cljdoc.org/d/com.github.seancorfield/next.jdbc/1.2.674/doc/readme -- * Fix #167 by adding :property-separator to next.jdbc.connection/dbtypes and using it in jdbc-url. * Address #166 by adding next.jdbc/with-logging to create a wrapped connectable that will invoke logging functions with the SQL/parameters and optionally the result or exception for each operation. Fix Getting Started* (were :unit_cost). * Update test-runner. Follow-up in #sql#2021-06-1706:04seancorfieldcom.github.seancorfield/honeysql "2.0.0-rc3"https://cljdoc.org/d/com.github.seancorfield/honeysql/2.0.0-rc3/doc/readme -- * Fix #328 by adding :distinct as special syntax, affecting an expression. * Address #327 by changing “unknown clause” error to including mention of “nil values” (which are also illegal). * Fix #327 by making single-argument helpers consistent with multi-argument helpers. * Support PostgreSQL’s && array operator. Clarify how to Getting Started*). * Update test-runner. Follow-up in #honeysql#2021-06-1719:14mauricio.szaboJust published Chlorine v0.12.0 for Atom - in this release, fixes for Lumo and Clojerl socket REPLs, an improved "Doc for Var" that uses markdown to render documentation (toggable - you can disable that) and also gets source (if it's a function) or var contents (if it's not) for most, if not all, REPLs that Chlorine supports. I'll publish a Clover version soon also - discussions on #chlorine-clover 🙂#2021-06-1801:04Cam SaulMethodical 0.12.0 is out -- notable features include https://github.com/camsaul/methodical/releases/tag/0.12.0 (click link for screenshot) and a handful of bugfixes. This was inspired by http://christophe.rhodes.io/notes/blog/posts/2018/sbcl_method_tracing/. Probably the most common reason I've heard against using fancy CLOS-style multimethods with :before , :after, and :around aux methods (like Methodical provides) is that they're harder to debug. That certainly used to be true. With the new trace facilities, Methodical multimethods are actually easier to debug than vanilla Clojure multimethods (allegedly). 😎#2021-06-1801:17eggsyntaxVery cool!#2021-06-1811:26Azzuritesomehow I'd like each library to have a "why?" somewhere in their documentation 😄 can someone explain to me for what, or why, I'd use this library? currently, I don't see it#2021-06-2200:58Cam SaulHere are a few reasons. A) Vanilla multimethods in Clojure either dispatch to a specific method or :default but there's no in-between. You can't do something like
(defmulti describe-animal-location (fn [animal location] (keyword animal) (keyword location)))

(defmethod describe-animal-location [:bird :tree]
  [_ _]
  "Bird in a tree")

;; can't do this
(defmethod describe-animal-location [:default :tree]
  [animal _]
  (str animal " in a tree"))
B) Aspect-oriented programming. Write a single logging method for all your implementations.
(m/defmethod describe-animal-location :before :default
  [animal location]
  (println "describe-animal-location called with" animal location)
  location)
C) next-method. In Clojure if you want call the "parent" method, you'd have to do something like
(defmethod describe-animal-location [:songbird :tree]
  [animal location]
  (println "A songbird is in a tree.")
  ((get-method describe-animal-location :bird :tree) animal location))
That requires you to know what the "parent method" is. In Methodical you can simply do
(m/defmethod describe-animal-location [:songbird :tree]
  [animal location]
  (println "A songbird is in a tree.")
  (next-method animal location))
D) Programmatic multimethod creation. Normal multimethods can't be passed around and modified on-the-fly like normal functions or other Clojure datatypes -- they're defined statically by `defmulti`, and methods can only be added destructively, by altering the original object. Methodical multimethods are implemented entirely as immutable Clojure objects (with the exception of caching).
(let [dispatch-fn :type
      multifn     (-> (m/default-multifn dispatch-fn)
                      (m/add-primary-method Object (fn [next-method m]
                                                     :object)))
      multifn'    (m/add-primary-method multifn String (fn [next-method m]
                                                         :string))]
  ((juxt multifn multifn') {:type String}))

;; -> [:object :string]
E) Custom invocation behavior: you can write a multimethod that invokes all its implementations -- the canonical use-case for this is creating a shutdown hook. F) Debuggability: You can use tools that ship with Methodical like trace to see what methods are getting called and trace calls to a multimethod
#2021-06-2506:27AzzuriteThanks @U42REFCKA! However I think you missed my point a bit 😄 I understood (some of it, because it does a lot) what features the library has - and that's what you explained here again. The question wasn't "what" - it was "why"? Why do I want to use A) (i.e. what would a use-case be where I couldn't easily handle it some other way)? Or B), C), D), E)? I just don't see the applications of the features. I.e. why I would use this library instead of something else. For example for E) (one of the only ones where you mentioned an application), I can just create a collection of functions and call those during shutdown. Why use multimethod implementations for that? (F, debuggability, I understand the why of course - but if I just want to debug something there are also some other very good libraries/tools out there - I wouldn't want to use a multimethod replacement just for better debugging)#2021-06-1801:39Cam SaulAlso: lein-check-namespace-declshttps://github.com/camsaul/lein-check-namespace-decls#add-an-alias-to-depsedn`deps.edn`https://github.com/camsaul/lein-check-namespace-decls#add-an-alias-to-depsedn. Elevator pitch: Tired of people writing ns forms like
(ns my-namespace
  (:require [some.thing [else :as else] [x :as x]]            
            [another.namespace.b :as b]
            [didnt.even.use.this :as unused]
            [another.namespace.b :as b]
            [another.namespace.a :as a]))
? Wish you had a linter that would complain if you didn't sort your :require s, or if you had duplicate requires, or unused ones, or if you used prefix-style requires when you prefer non-prefix-style (or vice versa)? You're in luck. https://github.com/camsaul/lein-check-namespace-decls#add-an-alias-to-depsedn can do all that and more, and even works on mixed Clojure/ClojureScript projects with reader conditionals in the ns form. And now, it supports deps.edn projects as well as Leiningen projects. (Sorry Boot users) We've been using this plugin to keep almost 1200 namespaces looking sharp in https://github.com/metabase/metabasefor two and a half years now. Add it to your project today! lein-check-namespace-decls isn't a good name for a project that isn't tied to Leiningen anymore, so I'm also soliciting suggestions for a new name here. Preferably a bird-related pun
#2021-06-1801:49seancorfieldI’m curious about what this does that clj-kondo doesn’t do for ns forms?#2021-06-1801:51seancorfield(it checks for duplicates, unused, and unsorted — I suspect the prefix/non-prefix syntax check is unique to l-c-n-d)#2021-06-1802:00Cam Saulactually now that I look a little more closely, clj-kondo does 90% of what this linter does. 💀 I think enforcing prefix or non-prefix syntax might be the only difference. I wrote this a while before clj-kondo had namespace checking stuff tho. I mostly updated this just because I've been using deps.edn for new libraries lately and I wanted to port some existing tooling over. FWIW we're using both this linter and clj-kondo at Metabase. I'm more of a "can't have too many linters" person#2021-06-1802:02seancorfieldI almost never see prefix requires (and I think they’re horrible) so they’d never get into our codebase because they wouldn’t pass PR review 🙂#2021-06-1802:04seancorfield@U42REFCKA The README says “Add a :check-namespace-decls key to your project.clj to configure the way refactor-nrepl cleans namespaces. All options are passed directly to refactor-nrepl.” — how do you control this via CLI / deps.edn invocation?#2021-06-1802:05seancorfield(looking at the source, I could just pass all those options as :exec-args right? might want to mention that in the readme)#2021-06-1802:05Cam SaulI like to have things like that that can be determined programmatically enforced by linters if possible.#2021-06-1802:06Cam SaulSorry, I guess I need to go thru the README again and make sure it makes sense now that it works with either Leiningen or deps.edn. You just pass all the options as :exec-args instead of under the :check-namespace-decls key in project.clj e.g.
{:aliases
 {:namespace-checker
  {:extra-deps {lein-check-namespace-decls/lein-check-namespace-decls {:mvn/version "1.0.4"}}
   :exec-fn    check-namespace-decls.core/check-namespace-decls
   :exec-args  {:prefix-rewriting false
                :source-paths     ["src" "test"]}}}}
#2021-06-1802:13Cam SaulAlso on a side note RE prefix namespaces. We were using them at Metabase for a long time. I came around to the benefits of flat namespace declarations a while back but I didn't want to deal with converting a thousand namespaces over all at once so we kept using prefix ones for a long time. I finally did a big PR to convert everything in January: https://github.com/metabase/metabase/pull/14281 I ended up writing some Emacs Lisp to find and then iterate over every Clojure file in the entire project, load the namespace, and call cljr-clean-ns on them so I was able to do it all programmatically. Still a big change tho. So the linter helps ensure I don't end up having to do that sort of PR again 😅#2021-06-1802:34Cam Saul@U04V70XH6 while we're on the subject of linters do you know if anything else does something like this? https://github.com/camsaul/lein-docstring-checker This is next on my list to port. This one is about 4 years old at this point. I don't think a lot of people care enough about docstrings to enforce them with a linter but I've found that having an "either document it or make it private" rule works well for libraries. For big projects it makes refactors easier too since stuff ends up being private more often you don't have to spend time grepping the codebase before renaming stuff (or for Metabase, we support 3rd-party database drivers, so we have to be careful about breaking stuff 3rd-party drivers might be using, so keeping more stuff private lets us move faster and make more improvements to the core project) I don't want to waste time porting it and find out that clj-kondo/Eastwood/Bikeshed/Kibit/whatever added it last year 💀#2021-06-1802:43seancorfieldThat’s built into clj-kondo — I rely on that one a lot!#2021-06-1802:45Cam Saulhaha no way. I guess I need to pay more attention to what's going on with clj-kondo. 😅#2021-06-1802:46seancorfieldI still use Eastwood as part of CI for one project but I mostly just rely on clj-kondo for everyday use now, esp since it’s integrated with editors and LSP etc and so it can run all the time while you are typing.#2021-06-1802:46seancorfieldI think there are a lot of very specialized Leiningen plugins that really ought to just be archived at this point — they date back to a “simpler” era 🙂#2021-06-1803:03Cam SaulYeah. I might have to archive some of my old liters now. Better to pool efforts on Kondo and submit PRs there than to spend time maintaining old stuff #2021-06-1803:23vemvSee also https://github.com/gfredericks/how-to-ns#2021-06-1803:26richiardiandreaand last but not least zprint supports formatting according to "How to ns" https://github.com/kkinnear/zprint/blob/master/doc/reference.md#how-to-ns#2021-06-1805:34pezMaybe you can find a name if you ask the question ”where's the poop in a Robin's nest?”. https://youtube.com/watch?v=lG7OmThrq5g#2021-06-1805:49seancorfieldCool video! 🙂 My education for the day 🙂#2021-06-1815:03richiardiandreaNice video! I've got a Robin's nest here and I now I am looking forward to the hatching :D#2021-06-1809:34borkdudeclj-kondo new release: 2021.06.18 New - Lint arities of fn arguments to higher order functions (`map`, filter, reduce, etc.) E.g. (map-indexed (fn [i] i) [1 2 3]) will give a warning about the function argument not being able to be called with 2 arguments. - Add map-node and map-node? to hooks API Enhanced / fixed - Disable redefined-var warning in comment - :skip-comments false doesn't override :skip-comments true in namespace config - False positive duplicate set element for symbols/classes https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20210618 Happy linting!#2021-06-1822:10mauricio.szaboSo, I've been experimenting with adding a real prolog in Clojure. It's not yet feature-complete, but as a proof-of-concept, it's working for some examples! https://github.com/mauricioszabo/spock#2021-06-1822:14seancorfieldIf there are no solutions to a problem, does it respond with no? That was always one of things I found adorable about Prolog 🙂#2021-06-1822:15seancorfield(also, please make it work with deps.edn and the CLI 🙂 )#2021-06-1822:16mauricio.szaboHere's an example of n-queens example :D#2021-06-1822:17mauricio.szabo@U04V70XH6 hahahaha, not yet 🙂. Currently it returns an empty list only. But I'll handle these cases#2021-06-1822:29Jacob O'Bryant> How many Prolog programmers does it take to screw in a light bulb? > No.#2021-06-1823:54mauricio.szaboBTW, I just saw that there's some confusion on the conversion (keywords translate to prolog atoms, but symbols sometimes become atoms, sometimes become vars).#2021-06-1823:55mauricio.szaboI think I'll make symbols become atoms all the time, and keywords become vars all the time. This makes more obvious how to unify things for example, and solvers will be less confusing#2021-06-2014:46pfeodrippeHi, released a overhauled version of Recife, now using TLC :) Recife 0.3.0 - Use Clojure and the REPL; - Visualize the trace; - Hillel's examples from his book; - Also an example using the incredible @jepsen_io's Elle lib. Model checking your implementation is easier than ever, the lib is like re-frame in the sense that you just pass functions which receive a state and return another state. One point that I would like to test later is to use pfeodrippe/arrudeia to have control over the scheduling of your application, with it you could. Another possibility is to test re-frame applications themselves given that it's async by default. Both need some form of instrumentation. https://github.com/pfeodrippe/recife Small release video at https://youtu.be/C9WwF4RXq74.#2021-06-2100:16Joshua SuskaloFarolero version 1.2.0 is released today! Brief changelog: • new macros for removing handlers and restarts in a dynamic context • a new way for handlers and restarts to interact across threads, allowing easy use of reducers • fixed some errors around exceptions automatically being translated to signals https://github.com/IGJoshua/farolero#2021-06-2107:12Ertugrul CetinHi guys, I've created a 3D racing game built with ClojureScript, React and ThreeJS 🏎️ (Clone of pmndrs/racing-game) https://github.com/ertugrulcetin/racing-game-cljs#2021-06-2120:37raspasovWow, very neat!#2021-06-2211:42Ertugrul CetinThank you!#2021-06-2600:09Young-il ChooI like how I can drive right into a mountain and see it from the inside 🙂#2021-06-2200:08Eric Scotthttps://github.com/ont-app/sparql-endpoint#2021-06-2204:59Lucy WangHey guys, I just released the 0.1.0 version of https://github.com/lucywang000/clj-statecharts, the finite state machine and statecharts library for clojure/clojurescript. This is the first formal release. I have being using it for a while in several internal applications, and it works pretty well insofar.#2021-06-2205:44jerger_at_ddaWe proudly present our new Keycloak Convention4Kubernetes deployment generator: https://gitlab.com/domaindrivenarchitecture/c4k-keycloak We provide the generator as jvm-library, js-webfrontend and standalone cli. https://social.meissa-gmbh.de/tags/keycloak https://social.meissa-gmbh.de/tags/k8s https://social.meissa-gmbh.de/tags/c4k https://social.meissa-gmbh.de/tags/clojure https://social.meissa-gmbh.de/tags/clojurescript https://social.meissa-gmbh.de/tags/graalvm#2021-06-2306:51jerger_at_ddaToday we release a new version of mastodon-bot - the clojure version of a mastodon-twitter bridge: https://gitlab.com/yogthos/mastodon-bot With • improved console out • improved rss error handling • updated dependencies • provided spec as cljc #clojurescript #mastodon #twitter#2021-06-2510:53NazralI'm happy to introduce https://github.com/Tyruiop/syncretism, a crawler + search engine for options (stock market's options) that can be easily deployed and ran locally. You can also https://ops.syncretism.io. • full Clojure + Clojurescript • Crawler has a simple scheduler to handle failures & rate limi • depends only on mysql/mariadb • provides a simple API to ease integration with other projects#2021-06-2522:52mauricio.szaboOk, the experiment continues: after seeing that's possible, indeed, to bind Prolog and Clojure, I made it work with SWI-Prolog (as TuProlog is quite slow): https://github.com/mauricioszabo/spock. Now, I want to check if it's possible to do a simple POC application and see where it shines, and also, see if I can use the WASM version of SWI prolog to make it work in ClojureScript. If anyone is familiar with Webassembly, please ping me 😄#2021-06-2604:24quantisanai.motiva/stepwise "0.6.0 - https://github.com/Motiva-AI/stepwise Stepwise is a library for building AWS Step Functions with Clojure and EDN. Use it to coordinate asynchronous, distributed workflows with AWS managing state, branching, and retries. Some example use cases [1] include: orchestrating ETL jobs, orchestrating microservices, and orchestrating a chain of operation events (see the pattern?). This is a first release with major updates in a couple years. We picked up this project from UW Laboratory for Precision Diagnostics and have been using it in production at Motiva for a few months. This is making our lives at Motiva a lot easier and I'd love to share it with you. [1] https://aws.amazon.com/step-functions/use-cases/#2021-06-2609:43Jakub Holý (HolyJak)Thanks for sharing! I've had the misfortune of having to create a Stef Function. I really hate coding in JSON :-) This would have likely made my life less painful..#2021-06-2611:43steffanI agree that authoring Step Functions inside CloudFormation templates is no fun 😓#2021-06-2612:02Karol WójcikThere is AWS SAM which should help much with state functions still though you have to use json ;(#2021-06-2816:00futuroI'm so excited to see this project! I've loved using StepFunctions, and specifically I was lucky enough to use them at a company that had an (unfortunately private) library for doing exactly this, including off-loading inputs/outputs to S3 to support larger input/output sizes.#2021-06-2816:01futuroI'm currently using Argo and this library gives me hope I can switch away soon. I hope to pick this up in the next 6-12 months. Thank you!#2021-06-2711:49viestiHi! I did some small updates to cypress-clojurescript-preprocessor: https://github.com/viesti/cypress-clojurescript-preprocessor#changelog Also added a note on how to use shared utility namespaces (so that not all code needs to be a cypress test suite): https://github.com/viesti/cypress-clojurescript-preprocessor#shared-namespaces#2021-06-2712:53viestiJust learned that Cypress has a way to execute commands from JS console, so made a hack for ClojureScript https://twitter.com/KimmoKoskinen/status/1409131358862073862#2021-06-2719:59viestiAlao, made a #cypress channel, for discussing on making Cypress work with ClojureScript#2021-06-2917:07Vincent Cantin> Call process/exit to not leave zombies when Cypress exits That is very appreciated, thank you.#2021-06-2723:46seancorfielddepstar {:mvn/version "2.1.245"} is available: JAR builder for CLI/`deps.edn` -- https://github.com/seancorfield/depstar/releases/tag/v2.1.245 -- adds :target-dir option; AOT compilation is now done in a single process (instead of a separate process for each namespace); some pretty big internal refactoring in preparation for the upcoming tools.build release (so pom.xml handling, AOT, and JAR building can be available as separate tasks); follow-up in #depstar (for specific Qs) or #tools-deps (for more general CLI/`deps.edn` Qs).#2021-06-2805:09AndrosTadam Web Framework now has a Twitter account where it will be posting progress and news.: https://twitter.com/TadamWeb#2021-06-3016:01jacekschaeI have been :male-technologist: working hard on a new 🎥 course -- it’s all about Datomic Cloud including Datomic dev-local, Datalog, Ions, and aws deployment. If you are into this kind of thing check out the website and sing up to be notified :hugging_face: https://learndatomic.com#2021-07-0114:23ericdalloHello clojurians! clojure-lsp Released https://clojure-lsp.github.io/clojure-lsp/ with fixes and exciting new features, clojure-lsp is not a editor only tool anymore, it has its own API and CLI 🎉 It's possible now to run clojure-lsp via terminal telling to clean all ns forms of your project, removing unused vars, sorting required/refers/imports 🚀 For more information, check #lsp.#2021-07-0114:33borkdudeExcellent, I can now deprecate carve? :)#2021-07-0114:35ericdallohahah I expect carve to have a better configurability ATM, but it's easy to improve on clojure-lsp 🙂 carve seems a valid another approach not using the LSP protocol so having both options sounds good for community 😄#2021-07-0114:35ericdalloAlso, not sure all features carve provide, if all of them are alreday included in the clean-ns refactoring#2021-07-0114:35borkdudeDoes clojure-lsp also offer a REPL API?#2021-07-0114:36ericdalloYes @U04V15CAJ with that release, the clojure-lsp.api should provide those features 🙂 https://clojure-lsp.github.io/clojure-lsp/api/#2021-07-0115:02rafaeldelboniThis is quite cool! For some reason I need to do this clojure-lsp -p ./ clean-ns to manage the clean-ns work in my repos, is that intended?#2021-07-0115:04ericdallothe default of the -p flag is the current dir, what error you were getting @UMMMKKADU?#2021-07-0115:05rafaeldelbonino errors, is just not doing anything#2021-07-0115:06rafaeldelboniI use zsh btw#2021-07-0115:08ericdalloit's correct, it have no namespaces to clean 😅 Maybe a Cleaned! print is missing 🙂#2021-07-0115:09rafaeldelbonihahaa#2021-07-0115:09ericdalloit will print the namespace cleaned only if it needs to clean anything#2021-07-0115:09ericdalloyou can confirm that, adding a unused var or sorting differently#2021-07-0115:10rafaeldelboniyeah it only shows up when I use -p#2021-07-0115:10rafaeldelboniinstead it just prints 0ms#2021-07-0115:11rafaeldelbonibut this is such a good tool, thanks a lot https://github.com/parenthesin/microservice-boilerplate/pull/13/files#2021-07-0115:11rafaeldelbonihaha#2021-07-0115:12ericdalloThanks! will investigate further more soon your project issue#2021-07-0115:13borkdudePerhaps it's related to not having an .lsp/config.edn ?#2021-07-0115:15rafaeldelboniI do have only an ~/.lsp/config.edn and just the ./clj-kondo/config.edn at projects level#2021-07-0115:15borkdudeyes, I meant the project level#2021-07-0115:15borkdudecould be related, dunno. I think it should be optional#2021-07-0115:16ericdalloI don't think so, it probably some issue with the -p default value, in this case (io/file (System/getProperty "user.dir"))#2021-07-0115:17rafaeldelboniI copied my personal .lsp/config.edn at project level and still having the same behaviour#2021-07-0115:19ericdalloyeah, it's not related with the config#2021-07-0115:22rafaeldelboniWant me to open a issue?#2021-07-0115:59ericdalloSure!#2021-07-0116:36rafaeldelbonihttps://github.com/clojure-lsp/clojure-lsp/issues/463#2021-07-0118:50borkdude@UKFSJSM38 Sorry to interrupt your release Eric, but I don't think your recent commits fixed anything :)#2021-07-0118:50borkdudeThe problem is that you are capturing values at build time#2021-07-0118:51borkdude(System/getProperty "user.dir") should work, but not when you put it in a top level def#2021-07-0118:51borkdudeThis is because static initializers are initialized at build time in graalvm native image with the --initialize-at-build-time option#2021-07-0118:52ericdalloHum, it makes sense, but I tested with the @UMMMKKADU project, let me double check#2021-07-0118:52borkdudePerhaps your commit fixed something because the path is relative now, but this is the real reason it was broken#2021-07-0118:53borkdudeI guess the commits do work, but I was surprised you were still using top level defs, which is probably not a good idea#2021-07-0118:53ericdalloyou are right, it's missing running it in a function, or using default-fn instead of default
#2021-07-0118:54borkdudeI mean for storing values that can be different over systems#2021-07-0118:54ericdalloyeah, it's probably a good idea I change that cli-options to be a function#2021-07-0118:54borkdudeThe CLI options are alright, but the defaults should just be handled dynamically, probably not using tools.cli itself#2021-07-0118:55borkdudejust using or in the main function or so#2021-07-0118:55ericdallowhy it's a problem handling in tools.cli if that cli-options would be a function?#2021-07-0118:56borkdudethat works too#2021-07-0118:57ericdalloalright, I'll improve that to be a function, thanks for the heads up 🙂#2021-07-0118:58borkdudea delay works too#2021-07-0118:59ericdalloyes, but I think changing
:default (io/file "")
to
:default-fn #(io/file "")
is enough
#2021-07-0118:59ericdallowhat is best, change to that ☝️ or change cli-optiosn to be a function?#2021-07-0119:00borkdudeoh I didn't know you vould provide a function for :default-fn, yeah that works too#2021-07-0119:00ericdalloyeah, that looks better 🙂 I just need to remember for every new option facepalm#2021-07-0119:01borkdudemaybe make a note ;)#2021-07-0120:22ericdalloReleased the fix!#2021-07-0121:13JonasHey all! I've been working in the last weeks on a https://github.com/sauercrowd/clojureflare to make it easy to use Clojurescript with Cloudflare workers It's super experimental right now, but four lines are enough to get your worker up and running! Check it out
(ns new-worker.core
  (:require [clojureflare.core :as clfl]))

(clfl/worker
  (clfl/route "GET" "/worker" "hello from my worker"))
#2021-07-0121:21JonasA full walk-through is available in https://github.com/sauercrowd/clojureflare/tree/main/example-worker#2021-07-0214:36oliycarmine-streams 0.1.3 has just been released 🎉 • fixes an edge case when a consumer's pending message has been deleted from the stream • adds a utility to clear pending messages from a group or particular consumer carmine-streams is a library that sits on top of carmine to provide a nicer api for working with redis streams https://github.com/oliyh/carmine-streams#2021-07-0216:21borkdudeMade a native CLI to execute Specter expressions on EDN from stdin. https://github.com/borkdude/specter-cli Mostly because of the challenge to make Specter work with SCI, but if this turns out to be useful, I'm willing to provide pre-built binaries. Lemme know! EDIT: now with pre-built binaries for macOS and linux
$ echo '{:a {:aa 1} :b {:ba -1 :bb 2}}' | ./specter -e '(transform [MAP-VALS MAP-VALS] inc ?)'
{:a {:aa 2}, :b {:ba 0, :bb 3}}
#2021-07-0216:36natemaybe a babashka pod?#2021-07-0216:36borkdudecertainly possible#2021-07-0313:56borkdudeI now provided pre-built binaries for linux and macos: https://github.com/borkdude/specter-cli/releases#2021-07-0220:04Michaël SalihiPing CRM full stack Clojure/Script SPA online demo support now server-side rendering: https://inertia.prestance-design.com/ It use a light Nodejs Express back end + Inertia written in ClojureScript: https://github.com/prestancedesign/pingcrm-clojure/blob/ssr/src/cljs/pingcrm/ssr.cljs It's in early state but the "Inertia stack" can now be use for app whose performance & SEO is very important.#2021-07-0520:29Michaël Salihi@U11SJ6Q0K Because we talked about SSR together, a little ping to let you know that this is done if you curious about it.#2021-07-0604:24tatutnice, I'll check it out#2021-07-0220:06Michaël SalihiP.S. For the curious checkout the ssr branch of the repo: https://github.com/prestancedesign/pingcrm-clojure/tree/ssr#2021-07-0405:46wilkerlucio[com.wsscode/transito "2021.07.04"] is out! This is a small new library to simplify basic usages of Transit (AKA: not having to create Java Buffer classes to do simple string encode/decode of transit). That and another few other goodies, find out more at https://github.com/wilkerlucio/transito#2021-07-0423:21tony.kayFulcro 3.5 is on Clojars. https://github.com/fulcrologic/fulcro The primary goals of this release were to separate as much of the logic from React as possible, and to improve the React Hooks support. This involved a lot of code motion, but only a small number of very rarely used vars could not be aliased back to their original location. This means there is the potential for a breaking change, but if your code uses those vars it will fail to compile, and the fix is trivial. There are also some improvements to the APIs for form state support, dynamic routing, and UI state machines. See the Git commit log for details.#2021-07-0509:37dgb23Does the logic separation imply that you want to be able to support multiple rendering backends other than react or is it more about being able to express things in the fulcro way at a deeper level?#2021-07-0511:46Björn Ebbinghaus@U01EFUL1A8M There was someone in the fulcro channel who experimented with a javaFX and a console renderer. Have a look here: https://github.com/phronmophobic/membrane-fulcro#2021-07-0512:26Björn Ebbinghaus@U01EFUL1A8M There is even a video from Tony Kay himself about using re-frame to render and Fulcro for state management. https://www.youtube.com/watch?v=ng-wxe0PBEg#2021-07-0515:33AleedIs there a part of documentation on using Fulcro state management facilities without UI components? from looking at table of contents it seems to still be intermingled, also since defsc is in fulcro.components namespace makes it seem like it includes built-in React/DOM components#2021-07-0515:34tony.kayAt the moment only docstrings in c.f.f.raw.components and c.f.f.raw.application. Only so many hours in the day.#2021-07-0521:26Aleeddidn’t realize there was a nested c.f.f.raw namespace (the membrane-fulcro example above must be from a previous iteration) thanks for pointing that out, will glance at docstrings#2021-07-1108:23tony.kayJust added a chapter as well https://book.fulcrologic.com/#_fulcro_raw_version_3_5#2021-07-0423:22tony.kayThere are also a number of minor improvements to the various RAD libraries. See their commit histories if interested.#2021-07-0604:41wilkerlucio[com.wsscode/pathom "2.4.0"] is out at Clojars https://clojars.org/com.wsscode/pathom This release adds to parsers the support for the boundary interface from Pathom 3 (https://pathom3.wsscode.com/docs/eql#boundary-interface). Besides the utility of the feature itself, it's going to be required for a new entity editor data feature that I'll be landing in Pathom Viz soon.#2021-07-0610:11oxalorg (Mitesh)Since 4clojure is shutting down, I built "4ever-clojure": a completely static version of it which runs using cljs + sci. It interprets the code in the browser itself. 🙏 (Thanks to @borkdude for sci + giving me the idea) It's live at: http://4clojure.oxal.org  Suggestions / Issues / PRs welcome: https://github.com/oxalorg/4ever-clojure 😊 New problems can be directly added via a PR 🚀#2021-07-0613:20AppleTry problem 3. Says 'uppercase' not allowed?#2021-07-0613:20ApplePerhaps display feedback in a div than a modal dialog?#2021-07-0613:25oxalorg (Mitesh)Yup there are a few issues with platform specific code which won't work reliably in cljs. Fortunately there's a way to patch these specific issues using sci, will look into it 🙂#2021-07-0613:30raspasovThis is very nice!#2021-07-0613:30raspasovPerhaps even makes sense to update Problem 3 with something like https://clojuredocs.org/clojure.string/upper-case#2021-07-0613:30raspasov(if supported in SCI, not sure)#2021-07-0613:42borkdudeclojure.string is in SCI by default. there is also a way to enable all JS interop#2021-07-0613:43borkdude(was uppercase about JS interop?)#2021-07-0613:53borkdude@U013MQC5YKD https://github.com/oxalorg/4ever-clojure/pull/1#2021-07-0613:53borkdudeI haven't tested locally, since there were no instructions of how to run locally ;)#2021-07-0613:58oxalorg (Mitesh)Adding instructions now! If you are using emacs+cider, you only need to cider-jack-in-cljs and a server should open up on localhost:8000#2021-07-0613:58borkdudeI just want to compile the CLJS locally, I don't need a REPL#2021-07-0613:59borkdudebut I'll try#2021-07-0613:59borkdudeI usually don't use jack-in since I can't follow what's happening with all those magically injected deps#2021-07-0613:59oxalorg (Mitesh)After doing npm install once, you can npx shadow-cljs watch :my-build#2021-07-0614:00borkdudeAlso I don't like the dev process to be a child process of emacs#2021-07-0614:02borkdudeyeah, this is what I needed: https://clojurians.slack.com/archives/C06MAR553/p1625579996453000?thread_ts=1625566296.443000&amp;cid=C06MAR553#2021-07-0614:19borkdude@U013MQC5YKD Not sure what this is: https://plausible.io/js/plausible.js net::ERR_BLOCKED_BY_CLIENT but my adblocker blocked it.#2021-07-0614:22borkdude@U013MQC5YKD OK, I think PR is ready for merge. 1) allow all JS interop 2) fix React key warnings 3) update .gitignore#2021-07-0616:15oxalorg (Mitesh)nyantocat Awesome!! Plausible is an open source analytics tool 🙂 I've updated the readme with dev instructions, and merged your PR 😁 Thanks!#2021-07-0712:50Azzuritenice 🙂 needs a <noscript> tag 🙂#2021-07-0722:36eggsyntax@U013MQC5YKD thanks so much for doing this! 4clojure was a big part of my own Clojure learning process, and I’m thrilled that it can continue helping clj/s newcomers in the future.#2021-07-0806:45oxalorg (Mitesh)Thank you @U077BEWNQ , I’m super grateful to the clojure community and just doing my small bit 🙌🙂#2021-07-0806:51borkdude@U013MQC5YKD https://github.com/oxalorg/4ever-clojure/issues/2#issuecomment-876178662#2021-07-0806:54oxalorg (Mitesh)I was sure that I did deploy after your merge, I guess not 🙈On it now 👍#2021-07-0614:33alekczFriends, the first version of PCP is out `0.0.1` 🎉 PCP: Clojure Processor is almost a drop-in replacement for php-fpm behind nginx. Like php it allows for multiple different sites to be hosted on the same VPS with the endpoints being derived from the directory structure. Best of all you get to write Clojure (thanks to #sci). It's still relatively new, but can easily withstand ~100 req/s on $5 droplet. Please give it a whirl and lemme know what you think. I'd love some feedback. You can learn more about it here: https://github.com/alekcz/pcp Special thanks to @bruno and @borkdude for the support and guidance in the journey so far.#2021-07-0620:03hlshipcom.walmartlabs/lacinia-pedestal 0.16.1 lacinia-pedestal adds support for accessing Lacinia GraphQL as an HTTP endpoint GitHub repo: https://github.com/walmartlabs/lacinia-pedestal Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/ Featured changes in 0.16.1: - Updated the version of the packaged GraphiQL; this included adding the request headers editor#2021-07-0710:05henryw374new library tools.jvm for getting data about goings-on in the jvm, as data. https://github.com/henryw374/tools.jvm#2021-07-0807:43borkdudeSCI, a Clojure(Script) interpreter suitable for scripting and Clojure DSLs, powering #babashka, scittle and various other projects, just got a new release: v0.2.6 Read the release notes here: https://github.com/borkdude/sci/blob/master/CHANGELOG.md#v026 Join #sci to follow up with questions.#2021-07-0811:43vlaaadvlaaad/remote-repl {:mvn/version "1.2.9"} is released. https://github.com/vlaaad/remote-repl is a REPL client allowing you to start a REPL from your REPL that connects to another remote REPL server. This version adds new functionality: https://github.com/vlaaad/remote-repl/#reconnecting on socket exceptions.#2021-07-0811:46imreAny chance this reconnect will make it into the remote-prepl functionality of reveal?#2021-07-0811:48imreOr is it already there but undocumented?#2021-07-0812:04vlaaadIt's not there, reveal does not depend on remote-repl.#2021-07-0812:07vlaaadI surely understand why it's needed, reconnecting here and there all the time is frustrating#2021-07-0812:07vlaaadI added it to my todo list 🙂#2021-07-0812:08imrethanks#2021-07-0814:35Azzuritelet's put a REPL inside my REPL so I can REPL while I REPL#2021-07-0815:02dgb23REPL all the way down!#2021-07-0817:13metasoarous#2021-07-0913:53Lucy WangSounds pretty useful! Is there a way to change the prompt when connected to a remote repl (like the chroot prefix in bash prompt)#2021-07-0917:04vlaaad@UP90Q48J3 The prompt is displayed by the remote REPL you are connecting to, this library only manages streams over wire, so it depends on the REPL you are connecting to#2021-07-0814:29nate sirehappy birth day @seancorfield#2021-07-0814:36otfromis this a new release or a number divisible by 10? If not doesn't it really belong in #releases? 😉#2021-07-0814:44emil0rI wish we could get bug fixes and improvements, just like software#2021-07-0817:07seancorfieldI appreciate the sentiment but this is not appropriate for #announcements#2021-07-0817:08seancorfield(and it was yesterday -- 7/7 -- and I'm 59 for anyone keeping score 🙂 )#2021-07-0818:11borkdudeAt least you won't confuse anyone about the month/day order with this birth date. Congrats!#2021-07-0819:23agigaoWell, I see what was happening - Happy Birthday Sean! 🎉#2021-07-0901:23val_waeselynckHa, look at that, we have the same birthday @seancorfield. I turned 30 on the 7/7#2021-07-0901:24seancorfieldCool! Happy (belated) birthday to you too @U06GS6P1N#2021-07-0912:46bruno.bonacciJust released: μ/log - v0.8.0 with a number of bug fixes and improvements: μ/log (Pronounced: /mjuːlog/) is a micro-logging library that logs events and data, not words! https://github.com/BrunoBonacci/mulog#2021-07-0916:46jerger_at_ddaWe just released https://gitlab.com/yogthos/mastodon-bot v1.13.6 Bringing improved output and improved error & timeout handling https://social.meissa-gmbh.de/tags/mastodon https://social.meissa-gmbh.de/tags/twitter https://social.meissa-gmbh.de/tags/mastodon-bot#2021-07-0917:16Michaël SalihiJust released Inertia-clojure - v0.2.3 https://github.com/prestancedesign/inertia-clojure: • Explicit mime type for HTTP response to fix issue when deploying on services like AWS Api gateway, etc • Refactor examples to use new createInertiaApp helper • Fix wrong page redirect after hot reloading • Bump dependencies#2021-07-0917:27Alex Miller (Clojure team)Happy to announce a pre-release of the Clojure CLI 1.10.3.905 and tools.build - read lots more here: https://clojure.org/news/2021/07/09/source-libs-builds This is being provided for feedback and tire-kicking and there will likely be more changes before it becomes a release. Notably if you have been following the pre-releases, we've temporarily removed the multi-function execution support.#2021-07-0917:58Adam HelinsFellow hackers, lately I have been using this zen way of managing my private monorepos, here it is now in the open: https://github.com/helins/maestro.clj Monorepos are often hard and besides Polylith, there aren't many great solutions. But Polylith, while great for some purposes, was too opiniated for my endaveours. This solution simply uses Deps aliases with a hint of Babashka magic. I find the result to be very flexible and amenable. I hope you'll find if useful. This a preview as well, so feedback and PRs welcome :)#2021-07-0919:10oxalorg (Mitesh)This is super interesting! Babashka glues in so well babashka. Once you know it's power you can really see that it's the missing piece to solve a lot of problems 🙌#2021-07-0919:12borkdudeAt work we generate deps.edns from a base deps.edn (using babashka) which fills in the versions so we're using the same version of every lib in every project#2021-07-0919:20nnicholsMy job uses Bazel for the caching/orchestration/querying, but defers to babashka for most of the “doing”#2021-07-0920:22Adam Helins@U04V15CAJ I've tried having one deps.edn per project and tried to make things super local but I encountered 2 problems: a) classpath for transitive local dependencies was getting really messy, Deps can't pick up distant changes ; b) very spaghetti-like, hard to maintain a clear overview, get a sense of what is requiring what. Don't you have that kind of issues?#2021-07-0920:25borkdude@UCFG3SDFV The overview comes from the generated deps.edns: what you see is what you get, it's no different than when you would have written the deps.edn manually. Same for local/root I think?#2021-07-0920:26borkdudeNot saying one approach is better than the other, just sharing what we did. I still have to digest what your project is exactly doing, but it seems like an interesting approach#2021-07-1010:12Adam HelinsYup, just trying to better understand. So each projects gets its own deps.edn file, right? Suppose your monorepo has 3 internal libs that depend on each other using :local/root: A -> B -> C. You are working on A. If you modify deps.edn of B to add a dependency for instance, I think you are good. But if you modify deps.edn of C (a transitive local dependency needed by A), then Deps can't detect it. You enter a cycle where you have to manually force recompute the classpath and even that might not be enough. I don't know if that applies to your setup? @U04V70XH6 I think I read about something like that on your blog but can't quite remember it#2021-07-1010:13borkdudeYes, this is a problem of deps.edn in general and not of my setup specifically I think#2021-07-1010:15Adam HelinsSo that's why I've been asking about using clojure on a user specified dir in BB, but ended up avoiding that and settled on a global deps.edn at the root of the monorepo. Then you never get that kind of problems and it just works.#2021-07-1010:23borkdudethat's a nice side effect#2021-07-1010:23borkdudeor design effect ;)#2021-07-1018:34seancorfield@UCFG3SDFV multiple posts about this on http://corfield.org#2021-07-1004:11wilkerlucio[com.wsscode/pathom3 "2021.07.10-alpha"] is out at Clojars https://clojars.org/com.wsscode/pathom3 This is the first jar release of Pathom 3, the project is reaching a initial feature complete phase and these versions will help tracking the progress from now on! Updates on recent works will come soon in the next edition of Pathom updates. If you new to Pathom 3, check the docsite https://pathom3.wsscode.com/#2021-07-1101:43mauricio.szaboThis is AMAZING! Good news!#2021-07-1106:42jmayaalvThank you Wilker for all the amazing work. We went live friday with our first app running pathom3 and it's an absolute pleasure to use it. Great work!#2021-07-1113:42pezCalva 2.0.204 just out. With these changes: • https://github.com/BetterThanTomorrow/calva/issues/1224 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1228 • Workaround: https://github.com/BetterThanTomorrow/calva/issues/610 The change in the formatter for comment forms got me to restructure the Calva docs some to collect things related to Calva’s Rich Comments support on a page of its own, where I also try to make the case for the workflow: https://calva.io/rich-comments/ Feedback very welcome, as replies here, or in #calva. Happy coding! ❤️#2021-07-1113:52pezPlease also see our Merch page,. There is better availability of the We do it With Rich Comments t-shirt since a few days: https://calva.io/merch/#2021-07-1114:33emil0rKinda missed opportunity to have the tag line say Rich comments#2021-07-1114:36pezWhich tag line?#2021-07-1114:41emil0rwe do it with rich comments#2021-07-1121:47wilkerlucioPathom Viz 2021.7.11 is out! The biggest highlight of this release is the new Entity Data field. Now you can send initial data start the Pathom process. Pathom uses your index to auto-complete possible keywords there, and the query editor auto-complete is also based on the context of the data provided in the new entity data field! This feature is compatible with both Pathom 2 and 3 (requires Pathom 2.4.0+ for Pathom 2). If you are using the Pathom connector make you upgrade it to the version 2021.07.04. You can download this release at https://github.com/wilkerlucio/pathom-viz/releases/tag/v2021.7.11 If you are in the latest, you can restart the app and it will update automatically. Other changes: - Support Pathom 3 Indexes directly - Query History fix trash icon position - Query History fix appending after overflow - Add from URL autofocus on input on dialog open - Allow display of empty query history - Display error indicators on query editor and entity editor#2021-07-1217:05vemvEastwood https://github.com/jonase/eastwood/blob/master/changes.md (+ previous releases) New features and multiple bugfixes are offered so that the default experience is buttery-smooth. Today, more than ever, you can run Eastwood in CI with minimal to no config and get useful, unique insights and no false positives, no exceptions, and no faults unrelated to your codebase (as it used to happen due to macroexpansions). Enjoy!#2021-07-1321:32uochanJust released antq ver 0.16.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Gradle is supported experimentally!#2021-07-1421:47borkdudeBabashka 0.5.0 🎉 A native, batteries included scripting environment for Clojure with fast startup. - Added clojure.tools.logging + timbre as the built-in logging libraries! - Source compat with clojure.data.json and replikativ/hasch! - Support for more clojure.pprint functions like formatter-out! - Update Selmer with << macro! - Various other fixes and improvements Full changelogs: https://github.com/babashka/babashka/blob/master/CHANGELOG.md Hop by in #babashka for more info.#2021-07-1904:58didibusWhat logger implementation is it using for clojure.tools.logging ?#2021-07-1905:06didibusNvermind: Add clojure.tools.logging with taoensso.timbre as the default implementation Didn't know trimbre could be used as an implementation for tools.logging#2021-07-1501:58HuahaiDatalevin 0.4.40 is released. A simple durable Datalog database with a native command line shell. Thanks to @denik, this release adds the feature of transactable entities, among other developer convenience functions. https://github.com/juji-io/datalevin#2021-07-1503:05wilkerlucio[com.wsscode/pathom-viz-connector "2021.07.15-1"] is out! This version improves the error handling for connections and prepare for the new strict mode coming to Pathom 3 https://github.com/wilkerlucio/pathom-viz-connector Full changelogs: https://github.com/wilkerlucio/pathom-viz-connector/blob/master/CHANGELOG.md#2021-07-1618:37Alex Miller (Clojure team)https://github.com/cognitect-labs/test-runner v0.4.0 is now available: • Improved code to avoid testing namespaces without active tests - thanks Mathieu Lirzin!#2021-07-1619:26borkdudeI love it when an improvement yields less code#2021-07-1619:45Alex Miller (Clojure team)#winning#2021-07-1708:23practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user level aliases for community tools and rich developer workflows. Monthly library updates and minor readme improvements, including updated details on using the unofficial approach of hotloading of libraries Additional: all aliases not have explicit versions for the dependencies they include, removing all RELEASE version placeholders Updates include: • Cognitect Labs test runner v0.4.0 (latest sha) • GitHub actions setup-clj-kondo - 2021-06-18 • borkdude/carve - latest sha • bhauman/figwheel-main - 0.2.13 • com.github.seancorfield/clj-new - 1.1.321 (new name and version) • com.github.seancorfield/depstar - 2.1.267 • com.github.seancorfield/next.jdbc - 1.2.674 • djblue/portal - 0.12.0 • org.clojure/tools.deps.graph - 1.0.63 • vlaaad/reveal - 1.3.212 :test/eftest and test/eftest-sequential aliases will be deprecated as I havent been able to improve the hack I used to get them working and they do not cleanly exit in some circumstances#2021-07-1715:27seancorfieldRe: clj-new -- in case anyone is curious about the "new name" comment: several of my projects have been published (and documented) under the "new" com.github.seancorfield group since the beginning of March (1.1.264 for clj-new) but I also double-published them under the old seancorfield group. As of July, I stopped double-publishing all of my projects, figuring four months of fairly regular releases was a reasonable migration period.#2021-07-1819:00JakubI created an example of building terminal UI (TUI) with Clojure and native bindings to https://notcurses.com/, a modern library with advanced graphics support (different from ncurses, check out the video on their homepage to see what terminals are capable of). It includes a compilation step with GraalVM native-image to produce an excutable binary with instant startup time: https://github.com/dundalek/notcurses-clojure-example#2021-07-1821:44ribeloI would give a lot for something like rs-tui or termui for clojure....#2021-07-1907:48JakubThat would be the next step, I think we can build some higher level widgets in Clojure on top of Notcurses, which will handle the lower-level tricky terminal bits.#2021-07-1911:10ribeloOnce it gets to the point where I understand what's going on, I'm in.#2021-07-1917:39borkdudeProbably @U7RJTCH6J has some ideas here as well, as he has a UI framework which abstracts reagent, lanterna (similar thing), etc.#2021-07-1918:23phronmophobicI have a demo of running a todo app terminal ui, https://github.com/phronmophobic/terminal-todo-mvc There are also examples using https://github.com/phronmophobic/membrane-re-frame-example and https://github.com/phronmophobic/membrane-fulcro for state management. Currently, lanterna is used for "graphics", and events, but it wouldn't be too hard to add another backend based on notcurses. That might be useful if notcurses makes it easy to draw certain elements like graphs. Fwiw, cljs has https://github.com/eccentric-j/cljs-tui-template. I haven't used it, but it looks pretty good.#2021-07-1918:31phronmophobic#2021-07-1921:27JakubPreviously I tried react-blessed and react ink, but I found some limitations and also it would be nice to have something with react-like interface that works in Clojure proper. Membrane looks really cool, from a quick glance it looks exactly what I was looking for, will definitely give it a try.#2021-07-1921:33phronmophobic:thumbsup: . if you run into any issues or have questions, feel free to ask in #membrane#2021-07-1922:11ribeloI also used react-blesed and got disappointed, now I basically forked ink and write most things myself from scratch in cljs. However I would still prefer to use clj instead of cljs.#2021-07-2009:07borkdude@U70QD18NP Perhaps I should try to learn some Zig, it looks useful.#2021-07-2020:39Jakub@U0BBFDED7 yeah, react-blessed being a wrapper over imperative library it has bunch of issues that surface out. ink is much nicer, more in line with modern react, simpler and better layout support using flexbox. The issue with ink is that it does not support layering (no modal windows), does not support labels on boxes and glitches with newer unicode versions.#2021-07-2020:44Jakub@U04V15CAJ I can recommend it, Zig is a nice tool to have in a toolbelt. For me it covers the remaining use cases that are not covered by clj, cljs, and babashka. It is also a pretty small and simple language, most of it can be learnt in one afternoon.#2021-07-2020:46ribelo@U70QD18NP I don't need layering, although I'd probably be happy if there was. I added the labels to myself and would be happy to do a PR if @vadimdemedes is interested, which he probably won't be. Regarding the glitches, commits were merged yesterday that seem to fix it. I think it was even your commits if I remember correctly.#2021-07-2020:47borkdude@U70QD18NP Can you show me any fun Zig projects I can hack and play with, besides your notcurses project? I did do some Rust programming, but Zig sounds really cool as well. Perhaps I can make a babashka pod with it.#2021-07-2020:48ribeloBy the way, I'm really rooting for https://github.com/dundalek/liz, although I haven't had a chance to use it yet.#2021-07-2020:50Jakub@U0BBFDED7 I am currently working on a project using ink so I made a PR to fix the most glaring bug. But there are more subtle ones, which I am not sure if they are fixable withhout a major rewrite.#2021-07-2020:52borkdudewhat's ink again?#2021-07-2020:52ribelohttps://github.com/vadimdemedes/ink#2021-07-2020:53ribelovery bad name to find and even the black belt in google fu does not help#2021-07-2020:55JakubI have some examples in the section https://github.com/dundalek/liz#examples which include both Liz and Zig source, last year I did some advent of code with it, thanks to low level speed was able to brute force a solution instead of coming up with proper algo 🙂#2021-07-2020:56JakubAlso if you have some lower level project i a drawer perhaps using some C library or OS syscals it might be a good fit. Zig has seamless interop with C like Clojure interops with Java.#2021-07-2020:58ribelozig looks very good, like something between rust and c. The problem is that it is very young and there is no ecosystem around it yet#2021-07-2020:59phronmophobicClojure's interop with C is pretty good with clojure-jna and/or dtype-next#2021-07-2020:59phronmophobicsome c libraries are easier to wrap than java!#2021-07-2021:00ribelo@U7RJTCH6J Is there an example on the web of how to use this?#2021-07-2021:01phronmophobichttps://github.com/Chouser/clojure-jna/ https://github.com/cnuernber/dtype-next/ https://github.com/cnuernber/avclj https://github.com/phronmophobic/clj-cef#2021-07-2021:01phronmophobicthere's probably more#2021-07-2021:02borkdudeJNA isn't compatible with GraalVM tho#2021-07-2021:02phronmophobicbut dtype-next is#2021-07-2021:02borkdudeyep#2021-07-2021:02borkdudeThis blog is also informative: https://yyhh.org/blog/2021/02/writing-c-code-in-javaclojure-graalvm-specific-programming/#2021-07-2021:03JakubI also have some experiments writing JNI bindings in Liz which should be graal compatible, I can try clean it up and publish.#2021-07-2112:50borkdudeexciting#2021-07-1820:04Asko NōmmI started developing a block-based WYSIWYG editor in CLJS (for use within JavaScript and CLJS projects) called Blocko: https://github.com/askonomm/blocko. The idea is to create something similar to what WordPress Gutenberg editor is, albeit a lot simpler. It’s currently in a 0.1 with a lot of things still pending to do, but it does work and I’m quite excited about it - and how surprisingly easy it is to build something like that with Clojure.#2021-07-1901:44rutledgepaulvI created a small ring middleware library for content-encoding negotiation. It supports gzip/deflate natively and brotli with an extra (unbundled) dependency. I was interested in supporting compression without spawning an additional thread per-request like some of the other libraries in the ecosystem that do gzipping. Cheers! https://github.com/RutledgePaulV/ring-compression#2021-07-2002:08wilkerlucio[com.wsscode/pathom3 "2021.07.19-alpha"] is out! https://clojars.org/com.wsscode/pathom3 This release is a big change to Pathom 3, now it uses strict mode by default, on first sight this will make error handling much simpler for initial users. To use the old tolerant way you can use the new lenient mode. Details about this strict/lenient error modes at https://pathom3.wsscode.com/docs/error-handling/ (There were many docs updates to align with the new strict mode by default). Full changelogs at https://github.com/wilkerlucio/pathom3/blob/master/CHANGELOG.md#20210719-alpha#2021-07-2121:56pezPlease say hello to Rich 4Clojure https://github.com/PEZ/rich4clojure It is a “copy” of 4Clojure meant to be used from the editor REPL, encouraging a Rich Comments workflow. I mean, even with the original web based version, I am sure many did what I did, brought it to the editor and hacked on it there. We might as well start there. It is where Clojure code is crafted, right? For sharing of solutions I am using Github gists. Please give it some spins and me some feedback. I know there are some things broken in the translation, and will fix things as I get to know about them.#2021-07-2214:04val_waeselynckHappy to announce Clojure Sustainability Works, a sub-community for 'sustainability-oriented' Clojure projects and programmers find each other, and collaborate fruitfully. Please provide feedback in threaded comments, or directly in the ClojureVerse post. https://clojureverse.org/t/clojure-sustainability-works-is-launched/7897#2021-07-2214:05val_waeselynckI hope it's OK to announce it in this Slack channel - arguably it counts as a project#2021-07-2214:06eggsyntaxOpen source sustainability? Environmental sustainability? Could perhaps use clarification 😁 > I hope it's OK to announce it in this Slack channel - arguably it counts as a project Seems ok to me 🙂#2021-07-2214:07val_waeselynck@U077BEWNQ mostly environmental - it's clarified here on ClojureVerse: https://clojureverse.org/t/about-the-csw-companies-category/7492#what-qualifies-as-sustainability-oriented-work-1#2021-07-2214:07val_waeselynckBut thanks for raising the clarity issue#2021-07-2214:09eggsyntaxAwesome project!#2021-07-2308:10oliyI'm pleased to announce the 0.1.17 release of martian, the http abstraction for Clojure/Script. Define http calls as data, or bootstrap from OpenAPI/Swagger, and call them like functions! https://github.com/oliyh/martian This release adds support for: • martian-hato - support for the https://github.com/gnarroway/hato http client for JVM 11+ This release improves: • Application of defaults https://github.com/oliyh/martian/issues/108 This release fixes: • Parameter aliases being confused between body, query, path etc https://github.com/oliyh/martian/issues/109 This release changes: • The clojars group - this and future releases are now under `com.github.oliyh`, see README for details #2021-07-2713:32chrisnAnnouncing a https://github.com/cnuernber/tmdjs that includes what I think is the most crucial subset of the dtype-next and tmd apis. This may help those of you trying to bridge server/client pathways with data science workflows and it definitely will help anyone dealing with timeseries data on the client or react-native. The implementation here is much more minimal, about 1/3 the size because the underlying javascript vm doesn't support primitive types like the java vm does so I avoided reams of macro code and interface declarations and such. So in a lot of ways this version is a lot more 'pure' than the desktop jvm version :-). Try it out and let me know what you think 🙂.#2021-07-2714:18martinklepschCitrus v3.3.0 has been released with a backwards compatible “escape hatch” allowing you to change Citrus’ default behavior quite significantly. We’ve been using it to pass the entire application state to controller methods among other things. https://cljdoc.org/d/clj-commons/citrus/3.3.0/doc/changelog#2021-07-2714:48wilkerlucio[com.wsscode/pathom3 "2021.07.27-alpha"] is out! 🎉 - Support disable input destructuring validation on pco/resolver with the flag ::pco/disable-validate-input-destructuring? - Run ::pco/transform before running the resolver validations - Fixed bug when combining batch + disabled cache + missing outputs doing infinite loops - Add p.eql/process-one and p.a.eql/process-one helpers Full changelog at https://github.com/wilkerlucio/pathom3/blob/master/CHANGELOG.md#2021-07-2802:26mauricio.szaboJust published a new version of my library check (https://gitlab.com/mauricioszabo/check). it's basically a library to allow for better testing - it wraps nubank/matcher-combinators and expectations for matchers, allow the user to define "custom matchers", and have a better support for mocks. It's been battle tested for more than a year, by testing Chlorine, Clover, and multiple projects that I've been working in ClojureScript. But when it really shines, for me, is on asynchronous testing for ClojureScript - it adds the ability to mock async elements, adds a timeout for a test, and teardown. It also does not "fight" against clojure.test, but on the contrary, it embraces it (so tools like kaocha, devcards, workspaces keep working correctly). Discussions on... #testing channel, maybe?#2021-07-2802:35eggsyntaxLooks like a nicely designed hybrid!#2021-07-2802:38seancorfieldThe syntax reminds me of Midje (unfortunately). I wondered if you had looked at https://github.com/clojure-expectations/clojure-test ?#2021-07-2802:39seancorfield(right now it only works with self-hosted cljs via Planck but I would love to have it work with more general cljs!)#2021-07-2803:05mauricio.szaboThere's also a clojure-test-like syntax like:
(check (=> 3 (+ 1 2)))
#2021-07-2803:15mauricio.szaboAnd yes, I looked at this version of expectations and I want to bring its matchers to check. The reason I didn't use it was mostly because I focused this last version on getting the async tests right - that's something that's really weak on ClojureScript IMHO.#2021-07-2811:06borkdudeClj-kondo is back with a brand new feature: macroexpansion (and some other improvements) ! https://github.com/clj-kondo/clj-kondo/blob/master/doc/hooks.md#macroexpand This is available in the just released version 2021.07.28! Changelogs: https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20210728 Enjoy. clj-kondo#2021-07-2821:01Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.933 is now available. Changes since last stable release: • deps.edn ◦ https://clojure.org/reference/deps_and_cli#_git • If a git library name follows the repo convention names, the :git/url can now be inferred (`:git/url` can also be specified explicitly and takes precedence) • :git/tag and prefix :git/sha can now be specified instead of the full sha. Both must point to the same commit. ◦ :sha has been renamed to :git/sha but the original is still supported for backwards compatibility ◦ :deps/prep-lib - a new top-level key can be used to say how a source lib should be prepared before being added to the classpath. This key’s value is a map with :alias, :fn, and :ensures. See https://clojure.org/reference/deps_and_cli#prep for more info. ◦ :tools/usage - a new top-level key can be used to provide the :ns-default and :ns-aliases context for a tool • https://clojure.org/reference/deps_and_cli#tool_install - git-based programs that can be installed with a local name. Tools can provide their own usage context in deps.edn. ◦ Added new auto-installed tool named tools with https://clojure.github.io/tools.tools install, list, remove. See https://clojure.org/reference/deps_and_cli#tool_install#. ◦ Install a tool with clojure -Ttools install <lib> <coord> :as <toolname> ◦ Run a tool with clojure -T<toolname> fn (also takes -X style args) • https://clojure.org/reference/deps_and_cli ◦ New -T option is like -X (executes a function) but does not use the project classpath, instead uses tool classpath (and adds :paths ["."] by default). -T:aliases is otherwise same as -X. -Ttoolname resolves named tool by name and uses that tool lib. ◦ https://clojure.atlassian.net/browse/TDEPS-198 - -X and -T will not wait to exit if futures/agents have been used ◦ https://clojure.atlassian.net/browse/TDEPS-182 - Improve deprecation messages to be more accurate ◦ https://clojure.atlassian.net/browse/TDEPS-183 - Fix -Sdescribe output to be valid EDN on Windows ◦ https://clojure.atlassian.net/browse/TDEPS-179 - Fix incorrect classpath when :classpath-overrides removes path ◦ Delay computation of local-repo path (don’t compute at load time) ◦ Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1003 • New -X:deps programs: ◦ find-versions - to find versions of Maven or git libs or tools ◦ prep - use to https://clojure.org/reference/deps_and_cli#prep source libs ◦ help/dir - to list available functions in a tool namespace ◦ help/doc - to list docs for a tool namespace or function#2021-07-2906:18orestisDoes :git/sha need to be the full one, if :git/tag is present, or could a short one be used (as mentioned in the clojureD presentation?)#2021-07-2913:17Alex Miller (Clojure team)if both, then short#2021-07-2921:14Michaël SalihiWhat a great release! Thanks!#2021-07-2822:09Alex Miller (Clojure team)tools.build {:git/tag "v0.1.7" :git/sha "8a3abc2"} is now available • TBUILD-10 - fix missing assertions in tests • Remove unnecessary resource file that overrides tools.deps#2021-07-3016:15jarohen#crux 1.18.0 is out 🚀 * Significant improvements to the Lucene module. * Ability to add 'secondary indices' (of which Lucene is the first) - custom indices that follow the Crux tx-log alongside the main indices. Can be used (for example) to create materialized views of your Crux transactions in other formats/stores - we're intrigued to see how folks use this 🙂 * First alpha release of crux-corda - adds the Corda blockchain (https://corda.net) as a possible source of Crux transactions, allowing you to query both the current and historical state of your Corda nodes using Crux's temporal queries. * All the usual bugfixes 🐛 For more details, see the release notes at https://github.com/juxt/crux/releases/tag/1.18.0. As always, a big thanks to everyone contributing to this release by raising/fixing issues, and helping us with repros!#2021-07-3019:44chrisnhttps://github.com/cnuernber/avclj, a small library built directly on top of ffmpeg using it's C bindings, is up on clojars and now supports both encoding and https://cnuernber.github.io/avclj/avclj.html#var-make-video-decoder. Enjoy :-)#2021-07-3100:56chrisnThanks :-)#2021-08-0319:10blak3mill3rVery cool, I played with it when you first released it and I'm looking forward to using it for realz#2021-07-3115:35borkdudeReleased the first version of nbb (not babashka, it's Node.js babashka!?) to npm. See https://github.com/borkdude/nbb for usage and installation details. If you want to chat about it, join #nbb for details.#2021-07-3119:42AndrosI share a small script for me that generates from RSS feeds a nice newspaper. https://github.com/tanrax/RSSPAPER#2021-07-3121:03cp4nThat's cool. Would make a nice browser landing page.#2021-08-0609:11AndrosIt's a good idea! It's not a big effort and I can bring it closer to other people.#2021-08-0116:21vemvEastwood 0.9.6 + https://github.com/jonase/eastwood/blob/Release-0.9.6/changes.md Featuring a few new linters: :reflection and :boxed-math (the latter disabled by default). :non-dynamic-earmuffs has been re-enabled as well. You can learn about the reflection linter's rationale and advantages https://github.com/jonase/eastwood/tree/Release-0.9.6#reflection. It's quite an improvement over, say, touching dynamic vars globally/repeatedly and then grepping for them. Enjoy!#2021-08-0116:53borkdudeI would mention #graalvm compatibility as a significant benefit of getting rid of reflection warnings as well#2021-08-0116:55borkdude(graalvm native-image to be precise)#2021-08-0204:32ambrosebsTyped Clojure 1.0.17: enhanced error messages--destructuring is now a first-class concept! Old: Polymorphic static method clojure.lang.RT/nth could not be applied to arguments New: The type (t/HSet #{:foo}) cannot be destructured via syntax [a] #core-typed https://www.patreon.com/posts/54411134#2021-08-0215:07tengstrand#polylith v0.2.0-alpha10 I’m proud to announce that the poly tool now suports the latest version of tools.deps.alpha! This https://github.com/polyfy/polylith/releases/tag/v0.2.0-alpha10 is a milestone which includes several improvements. The https://github.com/polyfy/polylith can be found here. Happy coding!#2021-08-0219:37kwladykanew library https://github.com/kwladyka/consistency-clj TL; DR; You are interested in if 1) you use google cloud and really interested in if you use google cloud run. 2) you want to learn how to make ring-wrappers for logs, especially with reading :body and you don’t know about (.reset ^java.io.ByteArrayInputStream body). Or just want to use my wrappers. 1) Google jsonPayload (https://cloud.google.com/logging/docs/agent/logging/configuration#process-payload) for google cloud run (https://cloud.google.com/run / https://cloud.google.com/run/docs/logging#using-json) and not only. It also works with https://cloud.google.com/error-reporting/docs/ without any change. In other words it is the simplest and most efficient solution for google cloud run when you want to keep your infrastructure simple and use google native solutions for logging and error reporting. 2) rings wrappers for logging: request, response, exceptions PS library is not only about logging. I have plan to push there code which I share across projects which I develop, but feel free to use it.#2021-08-0306:34viestiHi! Out of curiosity, I created a nRepl server for nodejs using https://github.com/borkdude/sci: https://github.com/viesti/nrepl-cljs-sci. You can find it in npm (`"nrepl-cljs-sci": "0.0.11")` for use as npm dependency, possibly for adding to a JS project. It's also available for CLJS projects on clojars (`org.clojars.viesti/nrepl-cljs-sci {:mvn/version "0.0.11"}` , see the https://github.com/viesti/nrepl-cljs-sci/tree/main/example/cljs since a bit modified SCI is required for now :)). Basic eval and load-file ops should work :) Happy network repling :)#2021-08-0309:57pezVery cool! I’m thinking a bit about what it would take to make this server work with Calva. Today Calva assumes a Clojure nREPL server, which might mainly be a UI thing, but I’m not sure. Do you have some use cases in mind for this? Maybe that would help me wrap my mind around the problem.#2021-08-0310:58viestiI did some hacks to please Cider so that I can make a CLJ cider connection 🙂#2021-08-0311:14pezYes, I can make a CLJ cider connection from Calva. But it is a bit confusing. 😃#2021-08-0311:34viestiCider differentiates cljs and clj buffers, and a I found out that a cljs file cannot be loaded into a CLJ repl, the there's example to use a .cljc file 🙂#2021-08-0311:35viestidon't know if Calva has same limitation 🙂#2021-08-0311:43pezIt’s funny, but Calva has the exact same limitation. I don’t know why, but maybe the idea about a CLJS nREPL server was too crazy to even consider.#2021-08-0313:58ericdalloclojure-lsp Released clojure-lsp https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.08.03-13.33.03 with awesome news 🎉 I'd like to thank you @borkdude for the help on #babashka and #clj-kondo side making it possible to clojure-lsp now understands babashka projects/scripts 🚀 From now on, clojure-lsp will make available completion, rename, find-references and all features you already know work great with bb as well babashka Another huge improvement/refactor on this release is how clojure-lsp lint public unused vars, we now use a new feature from clj-kondo called `custom-lint-fn` where it's possible to "create" its own linter but using clj-kondo features, giving the possibility to ignore this linter via code 🎉 Also this improves performance and open other possibilities to other clojure-lsp features 👀 For more information and details, check #lsp clojure-lsp#2021-08-0315:28lilactownFYI the LSP emoji is unreadable on dark mode and I wasn't sure what this announcement was about until I hovered over the parens at the beginning 😛#2021-08-0315:41ericdalloThanks, I actually forgot to add clojure-lsp after the released facepalm and slack doesn't allow me to edit the message anymore#2021-08-0315:42ericdalloOh, managed to edit :)#2021-08-0318:41alpox#2021-08-0417:56lispycloudsAnnouncing the very first release of contajners: https://github.com/lispyclouds/contajners 😄 😄 This is the spiritual successor of clj-docker-client(https://github.com/into-docker/clj-docker-client), the clojure client for docker; now supporting not just docker but podman(https://podman.io/) and hopefully more OCI container engines too!! This is a radical simplification and rethought of the design and the way the APIs are interacted with, hopefully providing a simpler and more efficient access to container engines with a very very data driven and REPL friendly approach! Status is still *Alpha* some of the rough edges being worked upon and some more of testing, specially with Podman is underway. Hope this is of use to you folks and testing, feedback and improvements are highly sought after and appreciated! 😄#2021-08-0417:57lispycloudsfollow up in #docker#2021-08-0418:07imreLove the name#2021-08-0419:38dominicmOoh. Is this using the docker-compatible API that podman exposes? Or did you have to do something extra to add support?#2021-08-0419:58lispyclouds@U09LZR36F that was the original plan but it seems its sort of compatible. A lot of POST bodies felt different to me and not so great docs. So bit the bullet and did a proper impl to support them both properly, bootstrapping from their Swagger 2.0 YAML specs 😄#2021-08-0419:59lispycloudsThe new design is in a way that its simpler to add in support for more engines later on too. Also took the chance to fix some perf and design mistakes made in clj-docker-client 😅#2021-08-0420:58blueberryNew release of Neanderthal, the Clojure high performance Matrix and Linear Algebra library with CPU and GPU support. 0.42.0 is out! https://github.com/uncomplicate/neanderthal http://neanderthal.uncomplicate.org#2021-08-0510:31pezNew Calva-version out. v2.0.206 brings: • https://github.com/BetterThanTomorrow/calva/issues/1248 – From now on Calva will default to using the latest release of #lsp, reset the setting calva.clojureLspVersion, if you have been using it, to enable the default. See https://calva.io/clojure-lsp/ for some (little) more info on this. • Performance improvement https://github.com/BetterThanTomorrow/calva/issues/942 – Tons of thanks to @brdloush for spearheading the identification, fixing and testing of the performance bottleneck! ❤️ #2021-08-0602:31Cam SaulAnnouncing the initial release of a new fast and extensible whitespace linter. Checks files for trailing whitespace, tabs, files that don't end in newlines, files that end in blank lines, Unicode characters that look maddeningly similar to ASCII ones, and invisible Unicode characters. Written in Clojure but you can use it to check any sort of text file. https://github.com/camsaul/whitespace-linter (Currently Clojure CLI only) At Metabase we used to use Bikeshed to check (some) of these things, but we recently transitioned from Leiningen to the Clojure CLI so we were without a replacement for a bit (AFAIK Bikeshed doesn't support the Clojure CLI). I'm sure there are other tools out there that could check these things for you (maybe not all of them), but I wanted to wrap my head around writing -T commands, so it seemed like a good excuse to write another linter.#2021-08-0606:49jerger_at_ddaWe've done first steps on reimplementing mastodon-bot (https://gitlab.com/yogthos/mastodon-bot/-/merge_requests/14) on clojure/jvm. Mainly because on jvm we can choose, when to go async. Feels quite good & we improved rss-input validation on our way using spec If anyone want's to join our jorney, pls. dm https://social.meissa-gmbh.de/tags/clojure https://social.meissa-gmbh.de/tags/mastodon#2021-08-0720:42Michaël SalihiI just discovered htmx https://htmx.org/ from a clojureverse post. Since I play a bit with it and I redone the classic SPA todo app with Babashka. An SPA without writing one line of JS and less than 10kb gzipped directly from Babashka! Here the repo for who is interested: https://github.com/prestancedesign/babashka-htmx-todoapp#2021-08-0721:02refsetThanks for sharing this, it's very neat! I also looked at your somewhat related Inertia.js/PingCRM stuff recently - what are your feelings about this approach relative to that stack so far?#2021-08-0721:51lukaszI'm working on an internal app built with hiccup and https://unpoly.com - somewhat similar concept and works great in practice#2021-08-0722:15dgb23Is this a typo? https://github.com/prestancedesign/babashka-htmx-todoapp/blob/master/htmx_todoapp.clj#L141#2021-08-0807:53Jakub Holý (HolyJak)In the Readme, extendable should perhaps be extensible?#2021-08-0914:37Michaël Salihi@U01EFUL1A8M Thanks for pointing me out. The missing space is not interpreted but definitely a typo, yes. @U0522TWDA This text is quoted from the official htmx website https://htmx.org/ so I don't know. English isn't my first language, but it seems "extendable" exists right?#2021-08-0914:42dgb23both “extendable” and “extensible” are completely fine, the slightly more precise term would be “extensible”, but they are largely interchangeable. https://english.stackexchange.com/questions/90426/extensible-vs-extendible#2021-08-0914:46Michaël Salihi@U0JEFEZH6 I didn't know a "unpoly", so thank you! It seems very interesting, I'll definitely play with it soon! :-)#2021-08-0915:13Michaël Salihi@U899JBRPF Thanks! I will say while both are alternative propositions but do not have the same objective of abstraction. Htmx allows not to write a single line of JS (although it is possible to write a backend in Node.js 🙂) while with Inertia.js, it is necessary to have a base with one of the following JS front-end frameworks (or "React" "Vue" "Svelte"). When we know and do not rule out the use of these, I would say that the approach of Inertia.js is more direct. The front-end is easy to write because it acts much as a template and everything that is routing, state management, auth, etc. will be done back-end side as writing a classic application. This will require little adaptation for a back-end profile having notions of front for example. With Htmx, there will be a little more to learn and the approach seems less obvious at the beginning with the advantage of being much lighter. I spent a lot more time in Inertia.js documentation than in Htmx so my opinion is certainly a bit biased at the moment. I hope that answers your question.#2021-08-0916:09dgb23htmx seems to be brutally simple and it takes the HTTP REST / HATEOAS approach very seriously, which is I think a good thing if you buy into the model. Also, it’s always going to be faster and more lightweight to directly inject HTML fragments instead of parsing JSON/EDN, then constructing a VDOM and then rendering the HTML. I think the limits are clear: As soon as you add forms and interactive elements with reactive states, you don’t want to make round-trips. The server typically also doesn’t need to know about the specific UI state you’re in at any given time. I like htmx! And I’m looking forward to explore it’s limitations, uses and how to solve problems that it doesn’t solve well.#2021-08-0813:51Chris McCormickHey all, @borkdude suggested I announce the retro-computing aesthetics Twitter bot I just finished building. It's built with nbb (which was a joy to build with for this project). Here's the announce Tweet where you can find a link to the bot ("c64core") and to the nbb/cljs source code: https://twitter.com/mccrmx/status/1424354480619810817 Enjoy!#2021-08-0817:01ikitommiWe are happy to announce [metosin/malli "0.6.0"], a summer vacation edition. Malli is a complete validation and specification library for Clojure/Script. The release has the following changes: • new tools to instrument function values and schematized vars • new repl/development tools to watch function registry emitting clj-kondo & instrumentation on changes (clj only) • optional fipp-based pretty printer for runtime (function schema) errors • support for var-metadata based function schemas - annotate your code without dependencies to malli • proper function schema guide: https://cljdoc.org/d/metosin/malli/CURRENT/doc/function-schemas • robust humanized errors - error forms are derived from the first error, fixes all reported bugs • much faster collection validation and transformation, kudos to @ben.sless 🚀 • new malli->plantuml schema transformer • lot’s of small improvements • small breaking changes, check CHANGELOG for details. Big thanks to all contributors and testers! If you are interested in using or developing malli, join #malli https://github.com/metosin/malli/blob/master/CHANGELOG.md#060-2021-08-08 The new dev-tooling in action:#2021-08-0901:49djblueJust released portal https://github.com/djblue/portal/releases/tag/0.13.0. No new features, mainly performance improvements. Portal is a data inspector / visualization tool that hopefully makes it easier to explore new and unfamiliar data models. It can be used as a https://djblue.github.io/portal/ tool or https://github.com/djblue/portal#usage in your process.#2021-08-0902:08ericdalloAmazing tool!#2021-08-0916:47fogus (Clojure Team)New Cognitect Labs aws-api service APIs available! CHANGES new AWS service APIs available (services version v811.2.958 and v813.2.963): Route53 Recovery Cluster, AWS Route53 Recovery Control Config, AWS Route53 Recovery Readiness, Amazon Chime SDK Identity, and Amazon Chime SDK Messaging README: https://github.com/cognitect-labs/aws-api/ API Docs: https://cognitect-labs.github.io/aws-api/ Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn#2021-08-1215:19kingmob@U050WRF8X Any plans to support AWS SDK v2? Some newer services aren’t available in v1, like TranscribeStreaming.#2021-08-2018:34fogus (Clojure Team)Hi! Sorry that it took a while to get back to you. While I am supporting the project I only have one day a week allocated to it. At the moment we only use the endpoints.json file from the Java SDK for the list of services. However, on the services API side we use the JS SDK. Was there something from the JS SDK that you found lacking?#2021-08-1010:56Bobbi Towershttps://twitter.com/porkostomus/status/1425040365850034181?s=19 Like "sound-of-sorting" this produces visualizations and "audibilations" of sorting algorithms, but instead of synth spaceship noises it tries to render a blues bass/organ duet.#2021-08-1207:36javahippieWe published the camunda-clojure-plugin for a smoother integration of the java-based Camunda Process Engine in Clojure applications: https://github.com/lambdaschmiede/camunda-clojure-plugin https://clojars.org/com.lambdaschmiede/camunda-clojure-plugin#2021-08-1212:59blueberryUncomplicate libraries have been updated to support the latest CUDA 11.4 and cuDNN 8.2.2 http://neanderthal.uncomplicate.org http://clojurecuda.uncomplicate.org https://github.com/uncomplicate/deep-diamond#2021-08-1213:13cassielI really must play with these. Would love to hear feedback from relative newbies on the software and/or the books.#2021-08-1217:04blueberryIsn't it better to try for yourself? There's tons of free tutorials on my website https://dragan.rocks most of them are written with beginners in mind.#2021-08-1220:38tony.kayI'm working on a new library for doing backups of Datomic Cloud databases. We needed it for a compliance checkbox on business continuity, and for copying (and redacting sensitive info) databases to staging environments. The library supports doing streaming-like replication of a live database, and continuous recovery, and the recovery side can filter/modify the transaction stream. I'm waiting on a verification from Clojars, but the Repo (with git sha access) is here: https://github.com/fulcrologic/datomic-cloud-backup I'll be working on this in the coming days testing it out and improving it as I run into issues. The artifacts needed for the streaming are protocol-based, and there is an S3 and Redis version of them that I'll be using in my particular application of it.#2021-08-1304:46tatutthis is great! addresses a sorely missed functionality... we also made our own custom tx-log backup/restore in our app for complience (customer had to have offsite backups as files)#2021-08-1304:46tatutbut it's good to have it as a separate tool and incremental backups is a nice feature#2021-08-1309:57Jakub Holý (HolyJak)@U0CKQ19AQ I guess I am overlooking something basic, but won't https://github.com/fulcrologic/datomic-cloud-backup/blob/main/src/main/com/fulcrologic/datomic_cloud_backup/cloning.clj#L163`try` in restore-segment!
(try
     (d/transact conn ...)
     (log/infof "Restored...")
     (catch ...))
always return nil instead of the expected {:tempids ...} due to the last expression being the log call instead of the transact call?
#2021-08-1314:50tony.kayooops. yes#2021-08-1314:50tony.kayI had just added that to see progress 😊#2021-08-1311:40pezI have just updated my #cljsrn example app repo https://github.com/PEZ/rn-rf-shadow Now using latest versions of about everything: shadow-cljs, React Native, re-frame, Reagent, Expo. Also fixed some README issues, and stopped Webpack from refreshing the web app on reload (as ClojureScript coders, that kind of lame state-killing refresh is not to our taste, right?) The demo video should still be reasonably valid: https://www.youtube.com/watch?v=QsUj7HO5xDg#2021-08-1311:42pezThanks to @U8MJBRSR5 for keeping me company while working with this. 😃#2021-08-1419:41Vincent CantinFrom my perspective, you kept me company while I was working on my project :rolling_on_the_floor_laughing:#2021-08-1320:16Alex Miller (Clojure team)Clojure CLI 1.10.3.943 is now available with many perf-related improvements: • https://clojure.atlassian.net/browse/TDEPS-199 Use default http-client in S3 transporter • Cache S3 transporter for a repo • Fixed session cache to work properly across threads / binding stacks for better perf • Replace specific maven version range requests with non-range request to reduce repo metadata lookups • Load and cache Maven settings once for perf • Cache version range resolution results for perf • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1019#2021-08-1321:17oliyI'm very pleased to announce my new website https://stardev.io, a place to find developers and technologies. It's written in Clojure and uses public data from the Github API. Some fun Clojure facts include: • There are https://stardev.io/languages/clojure • The top rated Clojure developer in the world is https://stardev.io/developers/tonsky • The top 5 Clojure repos are https://stardev.io/top/repos/clojure You may also be interested to know there are https://stardev.io/top/developers/, creating between them https://stardev.io/top/repos/. The https://stardev.io/countries/ have the most developers, but there is https://stardev.io/top/developers/all/in/cook_islands who probably has the best view. Why not find your account today and see where you stand? Rankings are available per language and location. Hope you have fun using it, if you have any feedback it would be greatly received!#2021-08-1404:15pezVery cool! #2021-08-1415:46practicalli-johnThis is a very interesting project to investigate GitHub data. Thank you. It also highlights some limitations of the GitHub source data and it's interpretation. The 'top' Clojure library, Fira Code is arguably liked for being a font rather than a font conversion tool in Clojure. Although happy to be proved wrong 😁 I don't believe LightTable is very actively used these days, but it was a fascinating project of its time. I have very fond memory of it. I am curious to try it again. And it's interesting that ClojureScript is on the top 5 but not Clojure itself. I think the study of GitHub data and StackOverflow data sources do make for a fascinating journey into some basic data science and the challenges around data interpretation Thanks again.#2021-08-1421:38oliyThere is a clear divide between libraries, where the end product is the code itself where the language matters (like e.g. ring) and products like FiraCode where the end product that people use and like is a binary and the language of the source is irrelevant. There is also an accumulative, accretive effect where people are unlikely to unstar a repo that they starred in the past. Repos will not peak and decline along with their popularity in terms of stars, but rather reach their peak and then stop growing. Any new rivals will likewise have to go through their entire product cycle to end up at a similar point! It's something I've considered to try to make it more zeitgeisty is to include contribution rates, rate of stars etc and I'll think about ways to approach that. I was wondering if I could generate a radar like thoughtworks/juxt based off this.#2021-08-1503:09vemvYes partitioning by year would sound a bit more useful / reflective of reality e.g. in 2020 $some_repo might have grown by 100 stars (from 1000) and $other_repo by 200 (from 0). $other_repo would be 'hotter' than $some_repo, even while smaller in absolute terms#2021-08-1322:13Alex Miller (Clojure team)io.github.clojure/tools.build {:git/tag "v0.1.8" :git/sha "38d2780"} is now available • write-file - TBUILD-15 - add :string option • write-pom - TBUILD-13 - add :scm options to write scm properties#2021-08-1413:32athosI'm happy to announce the first release of Trenchman https://github.com/athos/trenchman Trenchman is a standalone nREPL/prepl client written in Go and heavily inspired by https://github.com/technomancy/grenchman. It connects to a running nREPL/prepl server and starts up a REPL session instantly. Feedback is welcome!#2021-08-1413:46borkdudeAwesome!#2021-08-1413:47borkdudeAre you also aware of https://github.com/eraserhd/rep?#2021-08-1413:49borkdudeBtw, it's pretty easy to expose your binary as a babashka pod (this uses a very similar format as nREPL) so it can be used a a library from babashka. See https://github.com/babashka/pod-babashka-go-sqlite3 for an example in golang.#2021-08-1413:50borkdudee.g.
(require '[pod.athos.trenchman :as t])
(t/eval "(+ 1 2 3)" {:port 1234})
or so
#2021-08-1413:51athosHi, thanks for your comments!#2021-08-1413:54athos> Are you also aware of https://github.com/eraserhd/rep? Yeah, I know of it. Some of Trenchman's use cases overlap with it, I think. > Btw, it's pretty easy to expose your binary as a babashka pod (this uses a very similar format as nREPL) so it can be used a a library from babashka I'm not familiar with babashka pod, so I'll look into it later. Thanks for the suggestion! 🙏#2021-08-1414:28borkdude@U0508956F
bb nrepl-server & sleep 1 && trench -p 1667 && kill $!
This connects to a babashka nREPL server :)
#2021-08-1414:28borkdudePerhaps trench can support a timeout so it keeps trying until the port is open#2021-08-1414:28borkdudeAlso some read-line-ish feature would be nice so up arrow works#2021-08-1415:00athosI'm glad to see you playing with my tool 😄 Before the timeout, perhaps trench should support connection retry? > Also some read-line-ish feature would be nice so up arrow works Yes, readline is a must-have feature. I'd like to support it at some point if it's not too difficult to implement. For now, I'm using the command with rlwrap, like alias trench='rlwrap trench'.#2021-08-1415:01borkdudeyes, timeout + retry#2021-08-1415:01borkdudeyou could look at how joker has implemented their REPL, I think they're using some golang library for dealing with the input#2021-08-1415:02athosAh, you're right#2021-08-1503:24athos@U8QBZBHGD Wow, thank you for picking this out! 😍#2021-08-1421:21wilkerlucio[com.wsscode.pathom3 "2021.08.14-alpha"] is out! This release includes improvements for dynamic resolvers, which is what will allow the maximal graph vision of Pathom to work! Changes: • Fix cache store specs • Add ::pcr/wrap-process-sequence-item plugin entry point • Add filtered-sequence-items-plugin new built-in plugin • Batch support for dynamic resolvers • Batch support on foreign requests • BREAKING CHANGE: Dynamic resolvers always get rich inputs with input data and foreign ast • Dynamic mutations also go as input parts with params https://clojars.org/com.wsscode/pathom3#2021-08-1518:39seancorfieldHoneySQL "2.0 Gold" -- com.github.seancorfield/honeysql {:mvn/version "2.0.783"} is available -- SQL as Clojure data structures. Build queries programmatically - even at runtime - without having to bash strings together! -- https://cljdoc.org/d/com.github.seancorfield/honeysql/2.0.783/doc/readme • Uses different coordinates and namespaces to 1.0.x so that you can use both together and migrate on a per-query basis! • Completely rewritten to make user-level extension much easier and to fully support PostgreSQL without needing additional libraries -- but still maintains compatibility with the data DSL from 1.0.x and most of the helpers from 1.0.x -- see https://cljdoc.org/d/com.github.seancorfield/honeysql/2.0.783/doc/differences-from-1-x for more details#2021-08-1520:23vemvKudos! fully support PostgreSQL without needing additional libraries calls my attention. Does this refer to the revamped extension API, or I can actualy use vendor-specific syntax without extension whatsoever? https://www.postgresql.org/docs/current/functions-array.html#ARRAY-OPERATORS-TABLE comes to mind as a would-be tricky thing#2021-08-1520:26seancorfieldBecause of Clojure's restrictions on symbols/keywords, for the @> and <@ operators, you need to define a var as an alias:
(def at> (keyword "@>"))
but you can just register that as an operator and use at> in the DSL.
#2021-08-1520:27seancorfieldThe primary goal was to implement everything from the nilenso extension library out of the box and add more over time as folks need.#2021-08-1520:28seancorfield
(sql/register-op! at>)
That's all that is needed to register a binary op for @>.
#2021-08-1520:37vemvThanks! Looking forward to give it a spin. Pleasantly surprised by how simple it is.#2021-08-1522:37tony.kayI've done a bit of work to the datomic-cloud-backup library https://github.com/fulcrologic/datomic-cloud-backup and am up to version 0.0.5. The new version includes new support for writing backups to a local filesystem, a more general-purpose backup-segment! function, and a parallelized backup function for doing the initial backup of large databases in less time. My preliminary tests show a backup speed in the Cloud (writing to S3 in an alternate region) of at least 40k transactions per minute. I expect that to get faster as the I/O subsystems scale due to demand.#2021-08-1604:08tony.kayHm. The parallel stuff seems to push Cloud over the DynamoDB limit and it fails. Looks like there needs to be some kind of back-off on that when that exception happens.#2021-08-1606:35steveb8nor a read speed rate-limiter to keep it under. this might be better for exporting from prod databases so that normal operations are less at risk#2021-08-1606:44djblueThe portal data inspector has a new release, 0.14.0. Some highlights are: the portal atom now works in node.js, vega-lite is a little easier to use, scroll position is preserved on navigation and general performance improvements. Checkout the https://github.com/djblue/portal/blob/master/CHANGELOG.md#0140---2021-08-15 for more details.#2021-08-1612:41pezRich 4Clojure is updated to allow for practicing Clojure using an editor-connected REPL, without installing anything. It runs Calva in the web browser, thanks to Gitpod. Read about it, and some broader Getting Started with Clojure plans of mine for this week over at ClojureVerse: https://clojureverse.org/t/practice-clojure-in-a-full-editor-based-experience-without-installing-anything/8049#2021-08-1619:31ericdalloclojure-lsp Released clojure-lsp https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.08.16-19.02.30 with a lot of fixes, minor improvements, and support for a new leiningen plugin: 🚀 Now it's possible to use clojure-lsp API features directly from lein, for example to clean your project namespaces you can configure an alias or just run:
lein clojure-lsp clean-ns
For more information, check the #lsp channel
#2021-08-1710:13bozhidarIntroducing incomplete, a new simple Clojure code completion library https://metaredux.com/posts/2021/08/17/introducing-incomplete-a-simple-clojure-code-completion-library.html#2021-08-1711:06vemv what would be a use case for using incomplete but not compliment?#2021-08-1711:21bozhidarCode size limits mostly. See https://github.com/trptcolin/reply/pull/153#issuecomment-193387725#2021-08-1711:23bozhidarIt will be fairly easy to replace clojure-complete with incomplete when such remote code loading happens (which I assume is very rarely).#2021-08-1711:23bozhidarBut if someone can use compliment, they should use compliment - it's a great library.#2021-08-1711:29rickmoynihan@U051BLM8F: so is the plan to eventually replace nrepl.util.completion with this dependency?#2021-08-1711:55bozhidarNo, it's not. nREPL can't have any runtime dependencies.#2021-08-1711:56bozhidarI'll just keep the code of nrepl.util.completion and the standalone library in sync. Same as I do for https://github.com/nrepl/bencode#2021-08-1711:56rickmoynihanThat was my suspicion; thanks for clarifying#2021-08-1711:57rickmoynihanI’m guessing there’s no support for ::alias/keywords?#2021-08-1712:03bozhidar
(deftest keyword-completions-test
  (testing "colon prefix"
    (is (set/subset? #{":doc" ":refer" ":refer-clojure"}
                     (set (candidates ":" *ns*)))))

  (testing "unqualified keywords"
    (do #{:t-key-foo :t-key-bar :t-key-baz :t-key/quux}
        (is (set/subset? #{":t-key-foo" ":t-key-bar" ":t-key-baz" ":t-key/quux"}
                         (set (candidates ":t-key" *ns*))))))

  (testing "auto-resolved unqualified keywords"
    (do #{::foo ::bar ::baz}
        (is (set/subset? #{":incomplete.core-test/bar" ":incomplete.core-test/baz"}
                         (set (candidates ":incomplete.core-test/ba" *ns*))))
        (is (set/subset? #{"::bar" "::baz"}
                         (set (candidates "::ba" 'incomplete.core-test))))))

  (testing "auto-resolved qualified keywords"
    (do #{:nrepl.core/aliased-one :nrepl.core/aliased-two}
        (require '[nrepl.core :as core])
        (is (set/subset? #{"::core/aliased-one" "::core/aliased-two"}
                         (set (candidates "::core/ali" *ns*))))))

  (testing "namespace aliases"
    (is (set/subset? #{"::set"}
                     (set (candidates "::s" 'incomplete.core-test)))))

  (testing "namespace aliases without namespace"
    (is (empty? (candidates "::/" *ns*)))))
#2021-08-1712:04bozhidarThat's the extent of the keywords support currently.#2021-08-1715:51blueberry[New release - RC4] Deep Learning for Programmers: An Interactive Tutorial with CUDA, OpenCL, DNNL, Java, and Clojure https://aiprobook.com/deep-learning-for-programmers/
#2021-08-1800:05Sal TostiHey all 👋, I recently created a web-based version of cljstyle. It’s built with ctmx and (obviously 😉) cljstyle. You can check it out at http://www.cljstyle.com. (many thanks to @greg316 and whamtet)#2021-08-1809:17javahippieJust released clj-test-containers 0.5.0. It contains some fixes to the documentation, added some type hints to prevent reflection warnings and upgraded to use Testcontainers 1.16.0, which brings better support for M1 Macs, improved startup time and some fixes: https://clojars.org/clj-test-containers#2021-08-1816:31Mathieu CorbinI released a new version of Commentator, a free commenting system for your blog/website built in Clojure. This release brings a lot of improvements including multi website support. Commentator stores comments on any s3-compatible store (the app itself being completely stateless and so easy to deploy) and provides functionalities like a public/admin API to manage comments, an event system, an antispam and a rate limiter... The documentation is available at https://www.commentator.mcorbin.fr/#2021-08-1816:54pezCalva’s https://calva.io/getting-started/ is updated, taking the users much quicker to Interactive Programming (seconds), and trying to.quickly establish momentum. The easiest way to try it right now, if you are not a Calva user, is to use the zero-install option at https://github.com/PEZ/rich4clojure and expand those I am new to Clojure/Calva info panes. (I am working on a more tailored-to-the-purpose repository for this, more on that tomorrow maybe.) It would be great if some people test it and give me feedback about what works and does not work.#2021-08-1823:42seancorfieldhttps://github.com/seancorfield/deps-new -- a new, simpler way to create deps.edn projects, built on tools.build -- install (requires Clojure CLI 1.10.3.933 or later!):
clojure -Ttools install com.github.seancorfield/deps-new '{:git/tag "v0.1.0" :git/sha "089d868"}' :as new
and then create an app:
clojure -Tnew app :name myname/myapp
Feedback appreciated in #deps-new (renamed from #clj-new but I'll be supporting clj-new in there as well).
#2021-08-1906:06quantisanhttps://github.com/Motiva-AI/stepwise v0.7.0 is out. Use it to coordinate asynchronous, distributed processes with AWS Step Functions managing state, branching, and retries. New feature for v0.7.0: adds support for large payloads (beyond AWS Step Functions limit) by offloading large messages to S3 https://github.com/Motiva-AI/stepwise#offloading-large-payload-to-s3.#2021-08-1915:19ericdalloclj-kondo Announcing https://github.com/clj-kondo/lein-clj-kondo: a leiningen plugin to run clj-kondo in your project The main difference between running clj-kondo as a deps with run -m is that it's possible to pass a --lint $classpath where the plugin will replace with the leiningen classpath of the project 🙂 For more information check the https://github.com/clj-kondo/lein-clj-kondo or ask in #clj-kondo#2021-08-1920:50pezThe first version of the Getting Started with Clojure - Zero install is just released. It is a take on the beginner experienced inspired by some of the feedback in the What do beginners struggle with? thread over at ClojureVerse. What if we focus first on the language and on getting a feel for the mode of programming Clojure offers? If we can get devs hooked on that, hopefully they are then ready to go through some loops and hoops to set up their own machines with it and get cracking with projects. I’ve been at this for several days now and am getting a bit blind. I know there are holes in the plot, but where? Please give it a spin and give me feedback. Not sure where, but if you think your feedback fits in #calva, post it there, otherwise replies to this thread works for me. https://calva.io/get-started-with-clojure/#2021-08-1920:54pezThe setup is that ^ this ^ article gives some “what to expect?” info and has a button that spins up VS Code and Calva in your browser. VS Code automatically shows you instructions on how to fire up the Getting Started REPL, and that then starts the guides. These are really just REPL powered Clojure files.#2021-08-2008:39martinklepschGitpods seem very much like the recently-out-of-beta codespaces on GitHub itself, very cool that this type of stuff is possible now#2021-08-2008:56pezI also think it is like codespaces. Haven’t checked it out closely enough to know how similar or how different, though.#2021-08-2014:28donyormAnother possibly useful resource would be https://gitlab.com/unc-app-lab/clem-repl a project I'm working on to help new users better understand error messages (still in alpha/beta, but it is usable)#2021-08-2015:55pezIndeed, @U1C03090C. I’ve been wanting to experiment with how to integrate that in Calva since it was first announced.#2021-08-2015:56donyorm@U0ETXRFEW let me know if you would like help with that, I’m going to have a bit more bandwidth for Clem starting next week#2021-08-2015:58pezAwesome. I hope to have time!#2021-08-2409:58cyppanthat’s pretty awesome, I’m trying to setup a similar environment using github codespace, but I can’t install the calva extension on their embedded vs code, it shows me this error documentation https://code.visualstudio.com/docs/remote/codespaces#_why-is-an-extension-not-installable-in-the-browser that’s strange :thinking_face:#2021-08-2410:12pez@U0CL38MU1 I think we would need to enable it in the extension manifest. But also, I haven’t quite gotten around to figuring out if Calva even can run in Codespaces. I’m not sure how similar to Gitpod it is, but it seems that the web based VS Code is a bit limited whereas Gitpod Code is very similar to the full VS Code. The VS Code team isn’t quite ready with the API:s and guidelines either, so maybe it will clear up soon.#2021-08-2410:55cyppanOk I didn’t know about the extension manifest, yes codespace is very recent, it misses some documentation... I’ll try to ask them through their support#2021-08-2411:03cyppan(I’ve found this vs code documentation page about remote development and codespaces https://code.visualstudio.com/api/advanced-topics/remote-extensions)#2021-08-2411:36pezPlease file an issue about it on the Calva repository about this. If there isn’t one already, but I think there isn’t.#2021-08-2018:42fogus (Clojure Team)New Cognitect Labs aws-api service APIs available! CHANGES new AWS service APIs available (services version v813.2.972.0): Amazon MemoryDB, AWS Snow Device Management README: https://github.com/cognitect-labs/aws-api/ API Docs: https://cognitect-labs.github.io/aws-api/ Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn#2021-08-2211:44viestiHi! I put out 0.2.0 of cypress-clojurescript-preprocessor, with initial support for running a cljs repl inside the Cypress test runner via shadow-cljs: https://github.com/viesti/cypress-clojurescript-preprocessor#repl-in-cypress Might be that there's still some rough edges, but at least it is out there for hacking now 🙂 Also, finally found a way to properly kill child processes of the preprocessor 🧟#2021-08-2223:23Vincent Cantin@U06QSF3BK The git tag 0.2.0 is missing#2021-08-2305:41viestiOops, fixed, thanks for noticing! 🙂#2021-09-0622:17mauricio.szaboWhat has been you experience using a repl in cypress? We're kinda doing the same for one of our projects, and the now API proved to be a nightmare to work with - lots of things that don't work as expected or break with cypress version bumps...#2021-09-0709:00viestiThese are the same concerns that I had in mind also, and good to know that there is someone with actual knowledge to back this up :) I have to confess that I haven't yet used the "now" command in a real project, my interest was mainly to pursue what is possible and see where it takes me :)#2021-09-0715:48mauricio.szaboYes, I had more success with not using now at all and using (-> cy .-queue .run) to "force" the running of the queue (needs newest cypress version)#2021-09-0715:49mauricio.szaboBut even then, it's quite strange... I was thinking about re-creating the facilities of Cypress over Etaoin, for example, so REPL-Driven browser driving could be a first-class thing#2021-09-0809:49viestiyeah, having good repl for browser testing would be like holy grail :) Cypress has good stuff but annoying this lack of repl, but was positively surprised that someone used the term "repl" in Cypress github issue even :) https://github.com/cypress-io/cypress/issues/8195#2021-08-2415:56borkdudenbb 0.0.50 An ad-hoc scripting tool for CLJS (SCI) on Node.js. • load react relative to script dir when using reagent, don't depend on it directly • support loading ESM modules: (:require ["zx$fx" :as zxfs]) • promesa module (makes working with promises more convenient) • support cljs.pprint • added lots of documentation and examples https://github.com/borkdude/nbb Follow up in #nbb.#2021-08-2418:21jerger_at_ddaOn the way to reimplement mastodon-bot on jvm we managed to get a green graal-native build - yay 🙂 https://gitlab.com/yogthos/mastodon-bot/-/merge_requests/14 Does someone knows how to get (println) outputs on graal-native (pls. pm)? #mastodon #mastodon-bot#2021-08-2420:10borkdudeThere is a #graalvm channel for this. println should just work#2021-08-2506:57jerger_at_ddawill ask there :-)#2021-08-2609:34danielcomptonClojurists Together is funding six developers $1,500/month each for 12 months! https://www.clojuriststogether.org/news/long-term-funding-selections/ • Bozhidar Batsov • Michiel Borkent • Dragan Djuric • Thomas Heller • David Nolen • Nikita Prokopov More discussion in #cljtogether#2021-08-2610:32carocadHey @U051KLSJF, several of the links to the major members are broken. For example: latacora and roam. Hope it helps#2021-08-2610:34danielcomptonThanks, fixed!#2021-08-2613:07pezI think this long-term funding thing is totally awesome!#2021-08-2617:29pfeodrippeSoon we will be able to apply to Clojurists Together ternure 🙏#2021-08-2614:49carocadAfter a very long time of not working on this I am happy to take over the https://clojars.org/hiposfer/geojson.specs. Now available under https://github.com/carocad/geojson.specs#2021-08-2616:39Joshua SuskaloVersion 1.2.0 of americano has been released! This version brings a new cli function intended to allow you to use your americano build aliases in :deps/prep-lib! https://github.com/IGJoshua/americano#2021-08-2712:52plexusWatch and hot-reload your deps.edn, so you can add (or bump) dependencies without restarting your REPL. https://github.com/lambdaisland/classpath#watch-depsedn#2021-08-2712:53plexusThis is most definitely alpha/experimental. There are some known limitations. Experience reports are very welcome!#2021-08-2712:53plexusBackground reading: https://lambdaisland.com/blog/2021-08-25-classpath-is-a-lie#2021-08-2712:53pezSounds like magic.#2021-08-2712:56plexusOh it is! Thanks to @U5H74UNSF for repeating "this is how it really should work" over and over, and to Nextjournal for partially funding this work.#2021-08-2806:10seancorfieldio.github.seancorfield/build-clj {:git/tag "v0.1.0" :git/sha "fe2d586"} -- https://github.com/seancorfield/build-clj -- Common build.clj tasks abstracted into a library! Having implemented build.clj (and tools.build) in several of my open source projects I found there was a lot of repetition across them, so I factored out the common functionality into this library. Follow-up in #tools-build#2021-08-2820:27tengstrandpoly https://github.com/polyfy/polylith/releases/tag/v0.2.12-alpha Fixes five issues, so please check it out! #polylith#2021-08-2907:48vemvEastwood - heavyweight linter 🥊 - https://github.com/jonase/eastwood/blob/Release-0.9.9/changes.md#changes-from-097-to-098 (+ previous releases) This batch includes a new linter, performance improvements, new ways to selectively omit warnings, and various bugfixes. Learn more in changelog/readme. Enjoy!#2021-08-2910:34pezThe shadow-cljs + React Native + reframe example/quick start project, rn-rf-shadow, has been updated, by @brandon.ringe gratitude ❤️ , to support EAS builds. That is Expo’s new build system that makes it easier than ever to distribute your React Native apps and update them over-the-air. See https://github.com/PEZ/rn-rf-shadow for more info.#2021-08-3013:44jacekschae🎉 Learn Datomic is OPEN for enrolment and first videos will be available 22 Sep 2021 🥳 Big thank you 🙏 to @jarrodctaylor @stuarthalloway @furkan3ayraktar @wilkerlucio @thheller for code reviews and making this course awesome ❤️ https://learndatomic.com#2021-08-3017:24furkan3ayraktarWoop woop 🙌#2021-08-3017:39tengstrandReally cool!#2021-08-3013:49jacekschaeI have been working on video courses :male-technologist: for quite some time now and a lot of people reached out and ask about different pricing models. Here is my best attempt to address that: https://clojure.stream#2021-08-3014:00hindolYou have some of the best Clojure courses out there. But it is way too costly for a country like India. Will you consider having different prices for different countries?#2021-08-3014:08jacekschaeThe platform I use to host the videos does not provide functionality to provide discounts for specific countries.#2021-08-3119:42Kailash K👋 all, we are inviting speakers to our monthly https://www.meetup.com/Seajure/ meetup that happens first Thursday of every month. Please do let us know if anyone would be interested to give a talk or help us learn of the new cool library or project that you are working on, would love to schedule one and help make that happen:pray:#2021-09-0219:463GI am trying to work with my new team on getting some folks to speak. definitely keep me in the loop for future events 🙂#2021-09-0318:59vemvRemember to keep in mind the channel focus
Project/library announcements ONLY - use threaded replies for discussions.  Do not cross post here from other channels. Consider #events or #news-and-articles for other announcements.
no big deal but yeah for next time :)
#2021-09-0115:30Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.967 is now available • Refine exec exceptions for missing namespace vs missing function in namespace • Replace Maven-based build process with tools.build • Compile entry points in tools.deps used for building classpaths for performance • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1036#2021-09-0115:45imre> Replace Maven-based build process with tools.build This is intriguing. 1. Is this the build process for the clojure cli itself? 2. If yes, is the source for the above (clojure cli + its build process) available to the public?#2021-09-0115:46Alex Miller (Clojure team)yes and yes#2021-09-0115:47Alex Miller (Clojure team)https://github.com/clojure/brew-install/blob/1.10.3/script/build.clj#2021-09-0115:49imreoh, very nice, thank you!#2021-09-0115:50Alex Miller (Clojure team)replaced a big pile of maven and bash stuff. might end up driving a few enhancements to tools.build eventually to clean up a few things, but tools.build was sufficient as is.#2021-09-0115:51imreSounds excellent, thanks for sharing. I take it that https://github.com/clojure/brew-install#package-script is now outdated?#2021-09-0115:51Alex Miller (Clojure team)yes, I'll update#2021-09-0115:51imre👍:skin-tone-3:#2021-09-0115:53borkdudeBabashka, a fast-starting native scripting runtime for Clojure, 0.6.0 is released! Highlight: • Add support for java.net.http. This enables raw interop for those classes and thus running the java-http-clj library from source. The raw interop is the first part of a multi-stage plan to move all http related scripting towards a java.net.http based solution in favor of the other two solutions. To read about the other improvements and bugfixes in this release, see: https://github.com/babashka/babashka/blob/master/CHANGELOG.md#060 For questions: #babashka Special shout out to @grzm who did most of the work on integrating https://java.net.http.#2021-09-0214:56blueberry[BOOK] Deep Learning for Programmers 1.0.0 Released! https://aiprobook.com/deep-learning-for-programmers/#2021-09-0215:42carocadfor those of you interested in math libraries I just released frechet v0.13.0. This is mostly a performance improvement over previous versions by using native arrays internally. Happy coding! https://github.com/carocad/frechet#2021-09-0220:24tony.kayFulcro 3.5.3 has been released. This release includes configuration for clj-kondo, and a few tweaks to debug logging. https://github.com/fulcrologic/fulcro#2021-09-0220:41borkdude@U0522TWDA This should probably be: "../resources/etc" https://github.com/fulcrologic/fulcro/blob/7103a61d630210147304d748ddaba0cc9e70f1ec/.clj-kondo/config.edn#L1#2021-09-0221:35Jakub Holý (HolyJak)Thanks, Michiel! I totally forgot about that one 😅#2021-09-0306:25Jakub Holý (HolyJak)Fixed by https://github.com/fulcrologic/fulcro/pull/485#2021-09-0220:53Alex Miller (Clojure team)Pleased to release a brand new edit of "Simple Made Easy" https://www.youtube.com/watch?v=LKtk3HCgTa8#2021-09-0220:54Alex Miller (Clojure team)re-edited from the original HD video and using Rich's original slides + transitions, so much closer to how it was originally presented#2021-09-0220:54eggsyntaxAnd here I thought you were going to say it was the dance remix 😉#2021-09-0220:58Alex Miller (Clojure team)I'll get right to work on that#2021-09-0221:22andy.fingerhutThis makes me wonder whether there might ever be "signed copies" available? 🙂#2021-09-0221:36Jakub Holý (HolyJak)NFTs? troll#2021-09-0313:57Alex Miller (Clojure team)best auto transcription miss: "dysentery" for "disentangle"#2021-09-0317:14andy.fingerhutAre you allowed to edit the auto transcription?#2021-09-0319:00Alex Miller (Clojure team)yes :)#2021-09-0319:00Alex Miller (Clojure team)I did all that before release#2021-09-0401:26seancorfieldIt was so good to watch this again! It's such a good talk!#2021-09-0314:50mariaFor those of you that aren’t on Twitter 😉, we’ve announced the 9 projects that we will be funding for Q3 2021! https://www.clojuriststogether.org/news/q3-2021-funding-announcement/ • $9,000 ◦ http://shadow-cljs.org/ - Thomas Heller ◦ https://github.com/clojure-lsp/clojure-lsp - Eric Dallo ◦ https://github.com/metosin/malli - Tommi Reiman • $2,000 ◦ https://github.com/oxalorg/clojurians-log-v2 - Mitesh Shah ◦ https://github.com/alekcz/pcp - Alexander Oloo ◦ https://github.com/FieryCod/holy-lambda - Karol Wójcik • $1,000 ◦ https://github.com/dependabot/dependabot-core - Othman Azil ◦ https://github.com/clojure/core.typed - Ambrose Bonnaire-Sergeant ◦ https://github.com/polyfy/polylith - Joakim Tengstrand#2021-09-0315:21oxalorg (Mitesh)Huge congrats to everyone! And super thanks to the Clojurists Together clojurists-together committee and entire #clojure community for making this happen so consistently and smoothly! clojure-spin bananadance nyantocat#2021-09-0321:57uochanJust released antq ver 1.0.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq IMPORTANT: Dropped support for Clojure 1.8.0 from this version. See below to use antq with Clojure 1.8.0 or earlier. https://github.com/liquidz/antq/blob/main/doc/clojure-1.8.adoc#2021-09-0419:57kingmobManifold 0.1.9 is now out, boasting a long list of bug fixes and a few minor improvements. Many thanks to everyone involved. https://github.com/clj-commons/manifold/blob/master/CHANGES.md#2021-09-0420:20borkdudeI'm very pleased to see that this project has been revived, thank you @U10EC98F5#2021-09-0420:20kingmobnp, just trying to be a good shepherd#2021-09-0420:21borkdudegratitude#2021-09-0421:29nhaLikewise! I like manifold and do not plan on moving away from it 🙂#2021-09-0421:30borkdudewe're also using it at work via yada#2021-09-0503:22kingmobThx for clj-kondo, btw. Love it!#2021-09-0508:57plexusThe first release of witchcraft-plugin is out, which adds Clojure support (nREPL + deps.edn) to Minecraft. This complements the Witchcraft library, which provides an idiomatic Clojure API for REPL-driven interactive creative coding in Minecraft. https://github.com/lambdaisland/witchcraft-plugin#readme#2021-09-0508:59plexusFor people who've seen my previous videos the big difference here is that instead of running minecraft (Glowstone) inside Clojure, here we're running Clojure inside Minecraft, which makes it a bit easier to set up with other servers like Spigot or Paper, and hopefully lowers the learning curve for people coming in from the Minecraft community.#2021-09-0509:01plexusLittle technical detail that may interest some people, here's some (somewhat hacky but functional) code for renaming Java classes in an uberjar so they don't clash (i.e. "shading"), used from a tools.build task. https://github.com/lambdaisland/witchcraft-plugin/blob/main/build_plugin.clj#L45-L64#2021-09-0805:05robert-stuttafordthis is so frickin COOL!#2021-09-0708:48plexusNew release of lambdaisland/fetch, a wrapper around js/fetch with content negotiation.
[lambdaisland/fetch "1.0.41"]
{lambdaisland/fetch {:mvn/version "1.0.41"}}
• Add support for all remaining js/fetch options (notably :headers) • Add support for x-www-form-urlencoded request encoding • Breaking: treat a string :body as literal, don't (re-)encode it https://github.com/lambdaisland/fetch
#2021-09-0800:00HuahaiDatalevin 0.5.3 is out. This is a major release that introduces transparent client/server mode of using Datalevin databases. The server supports full fledged role-based access control (RBAC). A brief documentation for the Datalevin client/server is at https://github.com/juji-io/datalevin/blob/master/doc/server.md#2021-09-0809:13henryw374New library, js-literal , provides a cljs reader literal #j/s which is like the #js literal, but is recursive. https://github.com/henryw374/js-literal largely built to satisfy some curiosity... maybe something like this exists already but didn't find it. Example `
#j/s [:a {:b [:c]}]
; compiles to => Array.of("a",Object.fromEntries(Array.of(Array.of("b",Array.of("c")))));
; under advanced compilation, compiles to ["a",Object.fromEntries([["b",["c"]]])]
; if you can improve on the above, IOW object literal syntax, please PR
#2021-09-0809:17borkdudeprobably an obvious question, but why not just use clj->js ?#2021-09-0809:18henryw374yeah I should address that in the readme... clj->js should be equivalent, but will be less efficient, going via cljs datastructures#2021-09-0809:19henryw374so this is kind of in between clj->js and using #js all the way down#2021-09-0809:19imrelove the reader tag#2021-09-0809:20henryw374😉#2021-09-0809:21borkdude@U051B9FU1 interesting. I had an issue in SCI around #js: I accidentally made it behave recursively and I didn't realize that, even though it's a reader function, also I learned that CLJS will still evaluate to new objects all the time, e.g. in (apply identical? (for [i [1 2 3]] #js {:a 1})), this will yield false#2021-09-0809:58mkvlrj/lit in https://github.com/applied-science/js-interop does a similar thing#2021-09-0810:26henryw374interesting @U5H74UNSF, that macro will produce more efficient js, ie with object literals. Possibly they could have a reader function with the same content I believe and so have a tagged literal like #j/s that produces optimal js code... hmm#2021-09-0810:45henryw374suggested that https://github.com/applied-science/js-interop/issues/28#2021-09-0813:35refsetCrux has been renamed to XTDB, and there are https://github.com/xtdb/xtdb/releases/tag/1.19.0-beta1 available for testing with the fully-renamed APIs, to check everything has gone smoothly (no functionality changes this time). New Twitter account & blog post here: https://twitter.com/xtdb_com/status/1435593730921218058 The Slack channel has migrated to #xtdb already.#2021-09-0813:42mpenetanother 4 letter project name with an X, the tradition was respected I see :)#2021-09-0815:19richiardiandreaI like it!#2021-09-0819:36Bobbi TowersThe #exercism Clojure track has launched brand-new "Concept exercises" in a beta stage: https://exercism.org/tracks/clojure/concepts This is the result of a 2 year (mostly volunteer) effort to provide a better learning path on Exercism. What once was a largely haphazard collection of challenges is being revamped into a proper syllabus that navigates the student through the graph of core Clojure concepts, with a new in-browser editor with automated testing. This is very exciting and a bit terrifying for me, because it's the first thing I've written that is used in this scale of production. I'm sure there are lots of bugs, hugely embarrassing ones even, so I welcome your reports and any other feedback that could help improve the tooling and/or educational content.#2021-09-0820:38Bobbi TowersOh that's interesting... I'll report that to the team 😅#2021-09-0820:44p-himikIt's just an implicit offering to become a jack of all trades. :)#2021-09-0820:48Bobbi TowersThat's not actually a 0, it's a Mobius Strip that has been unraveled, representing the endless cycle of knowledge#2021-09-0914:49ChaseGreat endeavor! Thanks for doing this. I think it will be a great resource to guide beginners to. But one thing I would suggest is to add a project.clj file (or maybe deps.edn I guess but I would stay consistent with the rest of the non concept track Clojure problems) so folks can work on it locally with repl driven development, including running the tests.#2021-09-0915:05ChaseAhh, in looking at the github it looks like you have added a deps.edn file to all the concept exercises except the first one (lucian's luscious lasagna)#2021-09-0916:52metasoarousLook like the 0 thing is fixed, but what about these missing icons?#2021-09-0917:29metasoarousHmm... after signing up didn't see this any more#2021-09-0917:30metasoarousinstead just collapsed all of those containers#2021-09-0917:32metasoarousAlso... not able to start any of the excercises. They seem to be locked?#2021-09-0917:34metasoarousOh; I see. It's because I didn't complete "Hello world". But that's a little odd, because from the sylabus it looks like I should start by clicking "Basics", but then can't complete any excercises.#2021-09-0917:34metasoarousShouldn't hello world either be first in the syllabus, or part of basics?#2021-09-0917:36metasoarousNext, after completing the hello world exercise, I see this:#2021-09-0917:39metasoarousHuh; After clicking around a bit, that box was replaced with one that let me mark it as complete.#2021-09-0917:40metasoarousAnyway, going through lasagna now; This is pretty sweet! Great work!#2021-09-0917:41metasoarousIf I were to make any suggestions, other than smoothing out the friction above, I'd suggest an option for parinfer, and more robust autocomplete that incorporates local variable names.#2021-09-0917:42metasoarousRegardless, this is a wonderful resource; Thanks for working on this!#2021-09-0917:44metasoarousOh... now, it shows little locks for the other entries on the syllabus:#2021-09-1007:52jerger_at_ddaToday we released our dda-k8s-crate. A software to provision production ready mini k8s clusters. We updated version of all used components. https://github.com/DomainDrivenArchitecture/dda-k8s-crate/releases/tag/1.2.0 As we are going to drop pallet support this will be one oft the last releases. We will continue work in our provs-line. The new k8s setup will be k3s and kotlin based.#2021-09-1020:23Mark WardleDear all, not sure how many health IT clojurists there are, and some (but not all) of this work is UK specific, but I’ve been quietly working on a suite of core libraries and services using clojure. If anyone is interested, you are welcome to try them out. I’d also welcome feedback, and testing (e.g hermes with non-UK editions of SNOMED) hermes - https://github.com/wardle/hermes - open source SNOMED terminology library and microservice. Use for autocompletion and logic tests. dmd - https://github.com/wardle/dmd - the UK medicines and devices dataset - composes nicely with hermes to supplement the UK edition with concrete prescribing data clods - https://github.com/wardle/clods - UK health and care organisations including geographic mapping (useful for health related GIS) nhspd - https://github.com/wardle/nhspd - lightweight wrapper around the UK postcode directory - essentially geographic data for every postal code deprivare - https://github.com/wardle/deprivare - early work on socioeconomic deprivation indices / ranking - useful for analytics There are more, but these are the most re-usable. Clojure, and the libraries I’ve used - including datalevin, pathom, instaparse - have made this work productive and fun! Thank you all.#2021-09-1020:29schmeeeven though I’m not in the health field at all, I’ve been looking a lot at the code of these applications recently, especially Hermes. I think they are excellent examples of “real” Clojure applications, the kind that is rarely open sourced 👏 Kudos and thanks for making this available! 😄#2021-09-1020:41Mark WardleThanks that’s very kind! Immutability and functional / flows of data make so much sense in health and care so unclear why so many health apps are so stateful!#2021-09-1020:59ghadifellow previous Health IT clojurist here. Nice job!#2021-09-1021:35borkdudeI'm in the health IT, thanks for sharing your work#2021-09-1021:37Adam HelinsDear friends, this week was a very special one and it is hard containing the excitement. We launched the alpha version of Convex, the first decentralized Lisp in the world. And it looks very much like Clojure: https://convex.world/ It is essentially a worldwide Lisp machine, censorship-resistant, with an immutable and decentralized database anyone can join. A very energy efficient one, modeled around Clojure-like constructs. You'll recognize straightaway the datastructures you love and a transaction language looking strangely familiar.#2021-09-1022:06javahippieCongratulations on the alpha launch 🙂 For me the “Try it now” button on your page is broken (MacOS on Safari & Chrome).#2021-09-1023:04R.A. PorterSkimming through, you have an error on the https://convex.world/cvm/basic-syntax page. (I was worried it wasn't an error at first, but a weird implementation; I tested and confirmed it works as expected). (+ 2) ;; 4 should, of course, be (+ 2) ;; 2#2021-09-1107:32Adam Helins@U0N9SJHCH Hmmm, it's just a link and no one else reported it as broken. You could try again and DM me please? Thanks#2021-09-1112:36R.A. PorterDocumentation error. I was skimming, not running your samples in the sandbox REPL, and the comment at the end of this line is, as you can see, wrong.#2021-09-1208:24Adam Helins@U01GXCWSRMW Thanks, will be fixed in next deploy! What do you think about the rest of the doc? Quite a few topics, always challenging to explain. Feedback welcome!#2021-09-1213:35R.A. PorterThey're quite good. Lots of breadth and good examples. 👍#2021-09-1021:37Adam HelinsAnd since Convex is built on the JVM, here is a fine selection of first-class Clojure libraries covering everything you need: https://github.com/Convex-Dev/convex.cljc It is probably a first in history that you can you anything like that at the REPL: run a node, live interact with the network, issue transactions, do off-chain computation... It certainly gives an unfair advantage to Clojurists in this space. Even if you don't have any interest in blockchain, the database alone is already pretty fascinating, even when used locally. You can retrieve and work with datastructures way larger than memory! The project originally started with Mike Anderson (creator of core.matrix) and we have had a few good names from the Clojure community since then. However we were working in the shadows and are a small team. We are looking for contributors to import more ideas from the Clojure world, help with the tech and the website (we do lack a designer as well!) We are also keen to help you build decentralized applications. I've just opened the #convex channel if you want to talk about the tech, the current libraries, and ideas we could work on together :) Eager to have your feedback!#2021-09-1108:21prncVery neat! Is there anywhere on the website where you talk about Clojure as inspiration for some of the lang features? Would be nice to see/read!#2021-09-1109:29Adam HelinsI don't recall how explicit it is in the White Paper, but it's briefly mentioned at least in the Clojure libs and here: https://convex.world/tools/clojure-toolchain#2021-09-1210:10borkdudeNew library: graal-build-time 🎉. This library automatically configures clojure packages to initialize at build time in native-image builds. You will likely need this or a similar solution with GraalVM 22 (still in the future) but you can already use it right now to get rid of a deprecation warning. In fact, I have started using it in #babashka today. https://github.com/clj-easy/graal-build-time#2021-09-1212:06Karol WójcikI will check it out with HL 😄 Thank you @U04V15CAJ!#2021-09-1212:07borkdudeAnd @UKFSJSM38, @U7ERLH6JX :)#2021-09-1320:06ericdalloclojure-lsp Released clojure-lsp https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.09.13-19.32.00, the first release supported by https://www.clojuriststogether.org/ clojurists-together gratitude Besides a lot of fixes and improvements, clojure-lsp has its `diagnostics` feature available via API/CLI now, making clojure-lsp the only tool that can do most lint tasks in a single tool! • Cleaning namespaces • Formatting namespaces • Lint diagnostics (using clj-kondo) For more details, check #lsp 😄#2021-09-1320:21pezHere’s the first version of a Github Template project for running the http://Excerism.org Clojure Track in the browser. Zero-install, with full Interactive Programming enabled. https://github.com/PEZ/clojure-exercism-template Rationale from the README: > Why would you want to use another web browser editor than the Exercism built in one? Because this one supports Interactive Programming (aka REPL Driven Development). It is one of Clojure’s main super powers and if you are going to spend time learning Clojure, you probably also should learn the habits and the workflow that makes Clojure programmers so happy and effective. Please give it a spin! ❤️ Feedback is super welcome. In this thread and/or in #exercism.#2021-09-1408:32practicalli-johnClojure CLI tools user level aliases - for tools, libraries and environments across all your Clojure deps.edn projects Monthly library updates and readme clean-up All details in the changelog https://github.com/practicalli/clojure-deps-edn/blob/live/CHANGELOG.org#2021-09-13#2021-09-1410:38emakI am discovering this gem! awesome 🙂#2021-09-1410:08Karol Wójcikholy-lambda Released a new version of holy-lambda v0.5.0. This release has been done with the financial help of https://www.clojuriststogether.org/ clojurists-together ❤️ Holy Lambda is extraordinary simple, performant, and extensible custom AWS Lambda runtime for Clojure. https://github.com/FieryCod/holy-lambda Changes • HL is now fully decoupled from AWS SAM • Clojure on official AWS Java runtime is obsolete. As a replacement the new Clojure on Clojure backend has been developed, which is more performant than the official one. (benchmarks in progress) • Removed interceptors. • https://fierycod.github.io/holy-lambda • Smaller & more performant core! • Update babashka backend to 0.6.1#2021-09-1419:51Jakub Holý (HolyJak)Nice! Perhaps a typo here : >For Clojure on official AWS Lambda Java runtime the cold start is between 8-12on a 2GB memory-sized environment.  -> 8-12s on What is the Clojure on Clojure backend and why is it faster than AWS' Java? I couldn't find it quickly in the docs (though I suppose it's there somewhere..) Also, do you have some benchmarks for all the backend? I've once tried babashka lambda (without HL) and it still had considerable cold start - which I blame on the fact that unpacked it had 140MB (70 bb, 70 jdbc pod) that needed to be transferred and decompressed...#2021-09-1422:36dominicmWhere will you publish the benchmarks when they're ready? I'm very curious!#2021-09-1506:55Karol Wójcik@U0522TWDA thanks! Fixed the typo. Will push the change soon 🙂 Clojure on Clojure is basically uberjar + custom Clojure runtime ran on some sort of JVM. This is different than the official AWS Java runtime that: 1. Invokes the handler using reflection based on name, 2. Uses Java Correto (regular JDK users will be in some time pushed to use Java Correto, which works kinda slow for Clojure) (don't know why, yet) Regarding babashka backend HL includes the pods in the zip, so no download of pods happen on runtime. Size of the artifact does not matter much in your case I think. @U09LZR36F Here are benchmarks although not yet edited, and without tiered compilation for Clojure on Clojure, so there will be some significant differences in cold starts i suppose. https://github.com/FieryCod/holy-lambda/tree/master/benchmarks/holy-lambda-vs-other-runtimes Disclaimer: Benchmarks for Java are still using OpenJDK.#2021-09-1508:58Jakub Holý (HolyJak)Ok, so the Clojure runtime is essentially a Docker image, currently based on OpenJDK, like this one https://github.com/FieryCod/holy-lambda/blob/master/docs/examples/getting-started/clojure-backend/holy-lambda-example/Dockerfile, correct? And it is faster b/c Correto is slower than OpenJDK for Clojure and because reflection on name is faster than whatever AWS does by default? > Regarding babashka backend HL includes the pods in the zip, so no download of pods happen on runtime What I meant was that for cold start, Lambda needs to transfer the whole lambda zip from S3 where it is kept, and the bigger it is the more time that takes. So 1kB Python script will have faster startup than 80MB (22MB compressed) bb (on my PC, unzipping that takes 500ms!)#2021-09-1509:01Karol WójcikClojure runtime is essentially custom runtime, that does not include all the Java'ish bloat, and this is why it's faster. JVM implementation is a user choice, but yeah correto is slow, so by default I'm including openjdk#2021-09-1509:02Karol WójcikRegarding babashka I think you're assumptions are wrong. Do you cache jdbc pod? Or do you download the pod on cold start?#2021-09-1509:07Karol WójcikI mean 2-3 years ago I have packed 200mb of node_modules and cold start was around 300ms.#2021-09-1509:33Jakub Holý (HolyJak)My zip included both bb and the pod#2021-09-1509:35Karol WójcikAre you sure the pod was not re-downloaded? 😄 I had to do some additional work on HL side to ensure it#2021-09-1509:37Karol WójcikAnd if you're using add-deps you can be sure that cold start is high.#2021-09-1512:02Karol WójcikAnyway @U0522TWDA. If you really care about minimal cold starts use native backend. We have some successful stories. Look NextDoc @U0510KXTU 🙂#2021-09-1512:43Jakub Holý (HolyJak)Thank you. I will experiment with that at the next opportunity. I am quite sure (99.9%) the pod was not re-downloaded as I included it using a local path. I still think that transferring 40-50MB (in my case) and unzipping it is bound to take some time, even if there is a super network between S3 and lambda.#2021-09-1512:47Karol WójcikEncourage you to try HL 🙂 Maybe you will see some difference in time 🙂#2021-09-1414:34EddieI am pleased to announce the first release of fijit (https://github.com/erp12/fijit). Fijit is a Clojure library for interop with Scala. The goal of this project is to make it easier and more idiomatic to use Scala projects from within your Clojure projects. Some key features include: • Conversions between Scala and Clojure collection types. • Macros for writing Clojure code that targets multiple Scala versions. • A Clojure implementation of the Scala function types. • Idiomatic Clojure interfaces for common Scala types like Option, Try, Tuple, and more. • An experimental Clojure API for Scala reflection and runtime compilation. If you (like me) have to call out to Scala projects, hopefully some of the functions and macros in fijit can help reduce some of the friction.#2021-09-1414:36Noah BogartI don’t use scala, but this is cool as shit. Congrats on the release!#2021-09-1414:38EddieThanks!#2021-09-1414:39imreImpressive! (doc links in the readme don't work btw)#2021-09-1414:39EddieWoops! Thanks for pointing that out. The link in the sidebar should work.#2021-09-1414:41imrethat indeed does#2021-09-1414:41EddieReadme links should be fixed now.#2021-09-1414:48borkdudeFirst star.#2021-09-1414:49borkdudeA long time ago I tried to use the Clojure REPL from Scala: https://blog.michielborkent.nl/2016/07/26/clojure-from-scala/ This was during a short adventure in a Scala company.#2021-09-1415:18EddieThat is a very interesting idea! I never thought about inspecting the Scala/Java context using an in-process Clojure repl. Very clever.#2021-09-1501:44EddieThat's perfect! I added it to the FAQ and credited you. Perhaps one day I will retcon the origins to make myself seem far more clever and cultured than I am. 😄 Thanks!#2021-09-1513:46chrisblomNice, i tried to interop with scala code from clojure but gave up#2021-09-1513:47chrisblomit was too painful, i'll keep this lib in mind#2021-09-1415:43borkdudeclj-kondo 2021.09.14 A new linter :loop-without-recur and several other enhancements and bug fixes. https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20210914 #clj-kondo#2021-09-1420:41Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.11.0-alpha2 is now available with the following changes since alpha1: • https://clojure.atlassian.net/browse/CLJ-2123 Add :as-alias option to require like :as but not load • https://clojure.atlassian.net/browse/CLJ-1959 Added implementation of update-keys • https://clojure.atlassian.net/browse/CLJ-2651 Added implementation of update-vals • https://clojure.atlassian.net/browse/CLJ-1908 Add clojure.test api run-test and run-test-var to run single test with fixtures and report • https://clojure.atlassian.net/browse/CLJ-1879 IKVReduce - make old slow path (IPersistentMap) faster and extend to Object, detaching it from any fully enumerable set of types • https://clojure.atlassian.net/browse/CLJ-2600 Don’t block realized? of delay on pending result • https://clojure.atlassian.net/browse/CLJ-2649 Fix order of checks in some-fn and every-pred for 3 predicate case to match other unrollings • https://clojure.atlassian.net/browse/CLJ-2636 Get rid of reflection on java.util.Properties when defining clojure-version • https://clojure.atlassian.net/browse/CLJ-2350 Improve keyword arity exception message • https://clojure.atlassian.net/browse/CLJ-2444 Fix typo in test-vars docstring • https://clojure.atlassian.net/browse/CLJ-1509 AOT compile more Clojure namespaces • https://clojure.atlassian.net/browse/CLJ-2387 Fix off-by-one in socket server port validation • Update dep to core.specs.alpha (0.2.62) #2021-09-1509:20imre#2021-09-1509:25imreNevermind, I'll just comment on github#2021-09-1513:29Alex Miller (Clojure team)@U08BJGV6E probably @U050WRF8X is the best person to answer this but I believe the difference here is that with update-keys, the keys are going to change and the structure of the map will change, so there is no reason to update the existing map. also, there are lots of potential issues with changing the key set for different map types (like sorted, ordered, etc). In update-vals, the keys stay the same, so the fastest thing to do is update a transient version of the existing map, if you can.#2021-09-1513:36imreThanks Alex. It caught my eye as we use https://github.com/frankiesardo/linked which keeps insertion order and it became a habit of mine to use (empty m) everywhere I 'modify' a map without knowing the broader context#2021-09-1513:36fogus (Clojure Team)Yes! What @U064X3EF3 said ^^^ 🙂#2021-09-1513:50Alex Miller (Clojure team)Importantly, the docstrings for both update-keys and update-vals both say "returns a new map" which means you should not presume anything about the relationship of the returned map type and the input map.#2021-09-1513:54imreI understand the reasoning but (I guess due to the problems I had when the type was lost) still tend to disagree - (empty m) also creates a new map (be it sorted or ordered etc.) so you aren't really 'modifying' the original one (as you would with (transient m)). Apologies for making noise if this has already been considered, I won't pursue this any further, just hoped handling this similarly to update-vals could broaden the applicability of this fn.#2021-09-1513:56Alex Miller (Clojure team)tradeoffs exist, this is where we came down on it#2021-09-1513:56imreThank you for the explanation#2021-09-1507:21Johan ThorénAn announcement of somewhat lesser scope.. https://github.com/johanthoren/julian is a tiny library to convert between https://en.wikipedia.org/wiki/Julian_day and common time as we know it (year, month, day, etc.). The library supports two-way conversion and is available for both Clojure and ClojureScript.#2021-09-1511:55borkdudeAddendum to yesterday's announcement about #clj-kondo https://clojurians.slack.com/archives/C06MAR553/p1631634221275000, following up on the release of Clojure 1.11.0-alpha2: clj-kondo 2021.09.15 now supports :as-alias 🎉#2021-09-1517:18seancorfieldDoes it also recognize update-keys and update-vals?#2021-09-1517:20seancorfield(and I guess there will need to be a clojure-lsp release using this in order for it to benefit Calva users @UKFSJSM38?)#2021-09-1517:20borkdude@U04V70XH6 it should recognize this automatically when you lint clojure 1.11#2021-09-1517:21borkdudebut good point, I should update that in clj-kondo proper#2021-09-1517:22ericdalloYes @U04V70XH6 it's already on clojure-lsp master, it should be available on next release#2021-09-1517:22borkdude@UKFSJSM38 can you check if update-vals is recognized in a project with clojure 1.11?#2021-09-1517:23seancorfieldThanks @UKFSJSM38 -- I asked because, for some reason, clojure-lsp had stopped running in my VS Code instance so I had to reload the "window" to restart it, and that made me curious as to which version is running: 2021.09.13-22.25.35, which uses clj-kondo 2021.08.07-SNAPSHOT#2021-09-1517:26seancorfieldAnd that shows:
Unresolved symbol: update-keys
#2021-09-1517:27ericdalloTested with clojure-lsp master and it's working @U04V15CAJ#2021-09-1517:55borkdude@U04V70XH6 even that version should work with update-keys iff you have .clj-kondo directory in that project so clj-kondo can save a cache of your linted deps#2021-09-1517:56ericdallo@U04V15CAJ even so, if the user change the deps to use a newer clojure (1.11), clojure-lsp would scan the analysis with clj-kondo#2021-09-1517:57ericdalloI did this test with clojure-lsp and it worked, finding update-keys and update-vals#2021-09-1517:57ericdallobecause any change to project.clj or deps.edn triggers a new clojure-lsp full scan#2021-09-1518:12seancorfield@UKFSJSM38 How does LSP run the scan? Does it need to know about aliases? I have a monorepo and everything is behind a couple of aliases so, right now LSP doesn't always seem to startup, until I refresh the VS Code window, and it isn't scanning. I even deleted .lsp/sqlite.db to try to force that.#2021-09-1518:12borkdudeyou can configure the classpath-command for every project#2021-09-1518:13ericdalloFor multiple custom aliases, the best would be to configure th :project-specs in LSP#2021-09-1518:13borkdude
{:cljfmt {:indents {#re ".*" ns [[:inner 0] [:inner 1]]}}
 :auto-add-ns-to-new-files? false
 :project-specs [{:project-path "deps.edn"
                  :classpath-cmd ["clojure" "-A:dev" "-Spath"]}]}
#2021-09-1518:13ericdalloref: https://clojure-lsp.io/settings/#project#2021-09-1518:13borkdudecopied from the docs#2021-09-1518:27seancorfieldYeah, just trying to set that up... So I have a monorepo where the Clojure code is in a subdirectory so it looks like this:
<root>
    .clj-kondo/
    .lsp/
    clojure/
        deps.edn
So I guess :project-path should be "clojure/deps.edn" but how would I get it to run :classpath-cmd in the clojure project or will that :project-path be sufficient to tell it that?
#2021-09-1518:29ericdallois your clojure code inside clojure folder? if so why not import the clojure folder as the project root?#2021-09-1518:29ericdallothen everything should work right?#2021-09-1518:30seancorfieldNo, we have lots of other stuff in the root of the repo so the "project root" is as shown above, and we run the REPL in the clojure folder.#2021-09-1518:32seancorfieldand then under clojure we have lots of subproject folders, each containing src, test, etc. Those are brought in via the aliases. Here's my config.edn right now:
{:project-specs [{:project-path "clojure/deps.edn"
                  :classpath-cmd ["clojure" "-Spath" "-M:build:dev:everything:runner:test"]}]}
If I specify :source-aliases instead of :classpath-cmd will that help?
#2021-09-1518:34ericdallo@U04V70XH6 I checked the clojure-lsp code, and it will probably don't work as we run the clojure command in the project-root: https://github.com/clojure-lsp/clojure-lsp/blob/master/src/clojure_lsp/crawler.clj#L27#2021-09-1518:34ericdalloso maybe we could improve clojure-lsp to accept an optional path to run the classpath lookup command#2021-09-1518:37ericdallootherwise that would just work if for clojure you import the clojure folder for now#2021-09-1518:41seancorfieldHow about if I add a shell script that cd's to clojure and then runs the clojure -Spath ... command and tell LSP that's the :classpath-cmd ?#2021-09-1518:42ericdallothat could work :)#2021-09-1518:43ericdallomaybe we could improve clojure-lsp to check if the project-file is inside another subfolder not on root and run the classpath-cmd from that folder#2021-09-1518:45seancorfieldThat would also solve the problem 🙂#2021-09-1518:46ericdalloyeah, feel free to open an issue about that :) Also, let me know if the script that cd into the folder and run the clojure command works as well#2021-09-1518:46seancorfieldOK, well that did seem to work. LSP started and -- after a much longer initialization period this time! -- reports problems that make more sense. And, in particular, update-vals and update-keys are no longer flagged as unresolved /cc @U04V15CAJ#2021-09-1518:46ericdalloSweet :)#2021-09-1518:47ericdallothe next startups should use the .lsp/.cache making it faster#2021-09-1515:30oliyI'm pleased to announce the release of martian 0.1.18 🎉 martian is the http abstraction library for Clojure/script with support for various http libraries, Swagger/OpenAPI, generative testing, VCR recording/playback and more! https://github.com/oliyh/martian This release improves: • Errors thrown using the `hato` client are now handled by the interceptor chain This release changes: • An exception is now thrown if the route name is not found when calling an endpoint function https://github.com/oliyh/martian/pull/120 - thanks https://github.com/AndreaCrotti • The `hato` dependency is updated to `0.8.2` #2021-09-1515:49Karol Wójcik@U076R6N1L This a great library that I'm already using! Thank you for it! Do you maybe plan to use lighter version of http client for Clojurescript? I would rather not include clojure.core.async , 🙏#2021-09-1515:54Ben SlessI love the name#2021-09-1515:54Ben Sless👽#2021-09-1516:01oliy@UJ1339K2B thanks! do you know of any ring-compatible cljs http clients (apart from cljs-http, which as you point out uses core.async)?#2021-09-1516:04Karol WójcikUnfortunetely no. Which means you would have to write such library yourself#2021-09-1516:30oliyit could be a fork of cljs-http to be honest, it should only be a small change#2021-09-1516:45Karol WójcikYeah. But probably you would have to release a new artifact for it#2021-09-1519:33Jakub Holý (HolyJak)There is https://github.com/lambdaisland/fetch but I guess it is not ring-compatible, whatever that means#2021-09-1714:36oliy@UJ1339K2B i did some hacking last night: https://github.com/oliyh/cljs-http-promise#2021-09-1716:01oliyand now https://github.com/oliyh/martian/tree/master/cljs-http-promise#2021-09-1806:10Karol WójcikThis is so awesome! Thank you!!#2021-09-1808:19oliy🙂#2021-09-1520:53Alex Miller (Clojure team)tools.build v0.4.0 801a22f is now available • uber - TBUILD-2 - add support for configurable conflict handlers • uber - TBUILD-11 - detect file and dir with same name in uber • uber - TBUILD-16 - expand default exclusions • uber - add support for custom exclusions#2021-09-1603:05seancorfieldio.github.seancorfield/build-clj {:git/tag "v0.2.2" :git/sha "5a12a1a"} -- a wrapper for tools.build with a lot of sane defaults to reduce boilerplate -- https://github.com/seancorfield/build-clj • Now includes an uber task -- which includes merging of log4j2 plugins cache files! • Accepts many more options per underlying tools.build tasks so you can still customize "everything" when using build-clj • Overhauls/expands docstrings and readme • Updates tools.build to v0.4.0 Follow-up in #tools-build#2021-09-1606:22borkdudeWhy use bb for the alias of your lib instead of e.g. cb (corfield build)? #2021-09-1606:38seancorfieldBecause b is the example given for tools.build and bb seemed natural for an adjunct to that.#2021-09-1606:41borkdude:thinking_face: #2021-09-1617:09lreadWill folks maybe get confused that bb relates to babashka in some way?#2021-09-1617:11borkdudeI guess Sean isn't aware of how many times some people type those letters every day in their terminal ;)#2021-09-1617:28seancorfieldI would have used just b for the alias but tools.build already used that, and this is a "better build". Folks can of course use whatever aliases they want, but all my OSS projects that use build-clj use bb for it so I want to keep that consistent between those projects and build-clj itself.#2021-09-1617:32borkdudeI remember one discussion about an algorithm to automatically suggest aliases based on some heuristics in clj-kondo. I think I also remember why that never got written. If the library was named corfield.better.build I think the alias would have made a lot more sense.#2021-09-1617:39seancorfieldNaming is hard! ¯\(ツ)/¯#2021-09-1619:41lreadSo @U04V70XH6 you do know that the babashka executable is named bb right? I think this is what @U04V15CAJ is alluding to as a potential source for confusion.#2021-09-1619:52seancorfieldI have heard of babashka yes.#2021-09-1620:59lreadOk cool, just thought there was maybe some bb misunderstanding in the back and forth - I think that there isn’t! simple_smile#2021-09-1621:24seancorfieldI just don't think anyone is going to confuse, say, the set shell command with the set alias for clojure.set, so I'm not sure why anyone thinks that a bb command and a bb alias for a namespace is going to cause confusion either?#2021-09-1621:27lreadYeah, you could be right there! Perhaps just a case of babashka zealotry on my part!#2021-09-1706:44borkdudeI’ve seen several snippets with this alias and every time I cringe since the alias seems out of place and indeed is very much associated with bb (babashka). The corfield project is still young so it’s still a good time to change your mind, but it doesn’t seem like you’re open to this. At least I’ve tried.#2021-09-1706:46seancorfieldI'm sorry you "cringe" but that's really on you. No one "owns" an alias or an acronym.#2021-09-1706:48seancorfieldAnyone who doesn't like bb as a namespace alias will just pick something else.#2021-09-1706:51seancorfieldThe "general recommendation" for aliases is to use the last ns segment if it's unique, else either the prior segment or a "grouped" segment name -- but clojure.tools.build.api :as b doesn't follow that. I am targeting tools.build so bb is pretty natural as a wrapper/higher-level ns. At work we use our build.clj as a "REPL" so we run clj -M:build -i build.clj -r and then it's all (build/whatever {}) in the REPL so that's another reason why I didn't want to use build as the alias for org.corfield.build.#2021-09-1707:13borkdudeYou're right, I'm moving on, just wanted to get this off my chest :).#2021-09-1707:12vlaaadreveal I am happy to announce a new version of Reveal — https://vlaaad.github.io/reveal-pro! Reveal stands for Read Eval Visualize Loop — powerful and extensible REPL output pane suitable for development of any Clojure program. Reveal Pro brings in more tools that help with insight, so you can focus on your problems with data and knowledge you need available as soon as you need it. A flagship feature of initial release is Spec Forms that provide UI for specs that can be used to create data structures satisfying the spec (see below). Give it a try and tell me what you think, either here or in #reveal#2021-09-1709:55Jakub Holý (HolyJak)Nice! I will think about use cases for this 🙂 Good luck with the pro version, it would be great to make Reveal dev self-sustaining. I guess I need to really start using Reveal so that I can eventually upgrade to Pro 🙂#2021-09-1710:04vlaaadThanks! Some Forms use cases are listed on the Reveal Pro page. Another use case I have in mind for the future is extending Forms to support json schema. That way you'll be able to explore and build Vega views interactively (see what's possible today: https://vlaaad.github.io/vega-in-reveal)#2021-09-1710:06vlaaadAlso extending to some API schemas like swagger/openapi/graphql so you can build and run queries from Reveal#2021-09-1720:34eggsyntaxAs one bit of anecdata, I'd be a lot more likely to invest in this if I could buy it once and be done -- I just won't use software that insists on a recurring charge. Maybe worth considering that as at least an alternate option? Either way, cool stuff!#2021-09-1723:09vemvAdding to the anecdata, I froze https://Tower.app at version 2 the day version 3 came out and became recurring. I prefer using a fixed version (even if 'outdated') and not adding another charge to the pile of recurring stuff. Maybe as a middle ground you can offer a choice between a fixed product with 1y bugfix support or a constantly-updated product billed monthly. Either way, best wishes ✌️clojure-spin reveal#2021-09-1723:22seancorfieldCounter-anecdata: I subscribed to Cognitect's Patreon ($3/month) for REBL for every month that they collected patronage (they stopped when they bundled REBL with Datomic Free). I pay multiple (annual) subscriptions for software (a couple of Skype-related ones, Office 365, and a few other things -- I pay annually because it saves money over monthly subscriptions). I would say that anyone who is sponsoring other developers on GitHub is essentially paying a recurring monthly subscription. Lots of people are comfortable with a recurring model.#2021-09-1723:24seancorfieldI use Reveal day-in, day-out but I'm happy with the current feature set in the free version -- but I'll be keeping an eye on Reveal Pro and if it adds features I want to use, I'd be happy switching up to the recurring subscription.#2021-09-1723:26vemvI wonder if subscription burn-out is a thing personally at some point I felt like I was sponsoring the internet 🙃#2021-09-1723:35phronmophobicmore anecdata: developers are a really tough demographic to build products for. The trouble is that they generally don't want to pay for software regardless of how generous your offering is. You're probably also not charging enough.#2021-09-1800:10vemvCursive is an awesome success story btw#2021-09-1800:21eggsyntax> I would say that anyone who is sponsoring other developers on GitHub is essentially paying a recurring monthly subscription. > For me personally, that feels different. I don't feel as locked into it; I can stop if I choose without losing access to something. > developers...generally don't want to pay for software regardless of how generous your offering is. > Sadly true, although there are certainly some out there that are happy to pay for good software 🙂#2021-09-1801:21seancorfield> For me personally, that feels different. I don't feel as locked into it; I can stop if I choose without losing access to something. It's weird what we value, I guess. For example, on Patreon, you get access to different stuff at each patronage tier, so if you go from $10/month to $5/month you "lose access to something" but I think we (software developers) don't value art/writing/music the same way we value software...#2021-09-1801:22seancorfieldI'd love a model where the features available in a software tool are directly related to how much you choose to pay a month, so you could drop down to a more basic tool for a while if you wanted, then push back up to the premier version for a month if you wanted.#2021-09-1801:29eggsyntaxReplying in #off-topic so as not to hijack the thread (sorry @U47G49KHQ!)#2021-09-1806:22vlaaadNo problem, and thanks for a very interesting discussion! My POV is that I want to be able to spend more time developing Reveal because I have many ideas and not enough time, and some recurring revenue might eventually allow me to spend more time on it. Given how niche is this product, I don't see one-time purchases as a viable model that allows me to spend more time developing Reveal.#2021-09-1720:07fogus (Clojure Team)New Cognitect Labs aws-api v0.8.524 and new service API available! CHANGES • aws-api upgraded to core.async 1.3.622 • new AWS service API available (services version v814.2.991.0): kafkaconnect README: https://github.com/cognitect-labs/aws-api/ API Docs: https://cognitect-labs.github.io/aws-api/ Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn#2021-09-1822:41uochanJust released antq ver 1.1.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Support upgrading :tag and :git/tag in deps.edn! (upgrading :sha and :git/sha at the same time, of course)#2021-09-1902:48seancorfield
clojure -Ttools install com.github.seancorfield/clj-new '{:git/tag "v1.2.359"}' :as clj-new
https://github.com/seancorfield/clj-new • Switch app, lib, polylith, and template templates to generate tools.build-based project (instead of depstar, which has been archived). • Fix #80 by improving the failure reporting when a template cannot be located. • Fix #79 by warning about options we don't recognize. • Switch project itself to use tools.build intead of depstar. • Update .gitignore template files (includes change of LSP database location). Follow-up in #deps-new (which is for both clj-new and deps-new).
#2021-09-1909:25Ben SlessI would like to share with you a project I have been working on in the past few months, https://github.com/bsless/stress-server, aimed at setting up reproducible stress testing and profiling environments for Clojure servers. It's an ongoing project with the goal of finding the best configurations and settings, understanding the effects of JVM versions and GC algorithms, identifying performance bottlenecks and in general, learn! Currently I have results for Java 8, 11, 15, different GC algorithms, blocking and non blocking handlers, different operating rates and httpkit, aleph, jetty, undertow and pohjavirta for servers I hope you can find interesting and useful bits in it. It should help inform developers when choosing libraries and setting up servers, and library developers on the effects of their design choices. Contributions and feedback are very welcome. We can push the ecosystem forward. • project: https://github.com/bsless/stress-server • inaugural blog post: https://bsless.github.io/stressed-servers/#2021-09-1909:30ikitommiwell done, a really comprehensive setup! the Aleph InputStream bug is reported here: https://github.com/clj-commons/aleph/issues/523#2021-09-1909:33Ben Slessaha! Well, after I read muuntaja's docks and returned a byte array I worked around it by accident. Didn't really dig into Aleph looking for the answer, though#2021-09-1913:14schmeereally cool work, thanks! it would be nice if you included links to the PRs so we can follow the progress :thumbsup:#2021-09-1917:17Jakub Holý (HolyJak)Awesome project, thanks! I can't even imagine how much effort went into this...#2021-09-1917:44Ben Sless@U0522TWDA More than the effort, you can't imagine how much time it took, there are hundreds of possible combinations for all the scenarios. Each one runs for 10 minutes. That means that profiling one server takes an entire night. Now imagine waking up in the morning and finding out you made a mistake 😄#2021-09-1917:45Jakub Holý (HolyJak)I guess you are either saint or crazy 🙂 Thank you in either case! 🙂#2021-09-1917:51Ben SlessProbably the latter, but I haven't been professionally tested 🙃 I working in VLSI has made me more tolerant of 24h long simulations#2021-09-2009:44Ben SlessLaunched a run with java 17 Results in a day or so 🙂#2021-09-2016:41ikitommiis there a summary of the results somewhere?#2021-09-2016:42ikitommiold, but related btw: https://github.com/ptaoussanis/clojure-web-server-benchmarks#2021-09-2016:59metasoarousHow feasible would it be to parallelize the tests (e.g. on aws) to speed things up?#2021-09-2017:47Ben Sless@U055NJ5CC there's a big CSV with everything as part of the repo. I'm actually hoping some of the kind folks from the data-science / visualization groups will take a crack at it Interim conclusions are that http-kit can suffer almost everything, and that later JVM is better @U05100J3V sadly no, I want to make sure I'm comparing apples to apples as much as possible, unless you're willing to pay for on-demand instances. Are you the metasoarous behind oz? I've been fighting with Vega for the past few hours trying to make some nice interactive plot with it which would make drawing conclusions easier#2021-09-2017:52metasoarousThat would be me 🙂 How can I help?#2021-09-2017:53metasoarousRegarding apples to apples & on-demand instances, I was assuming as much; Could still imagine it being useful for situations where you need tighter turn around. But also probably a lot of work, so don't do it on my account.#2021-09-2017:55Ben SlessIs there an appropriate channel to discuss it? It would get very off topic#2021-09-2018:04Ben Sless@U055NJ5CC what I usually do to get a feel for the data is cd to the png directory, pick out one file name, (doesn't really matter where you start), then try replacing each of the dimensions with * and view the matching files in feh or another program which would let me page between them. That way I can see the effects of modifying one parameter with all others being equal#2021-09-1911:27borkdudenbb, a scripting environment like babashka, but for Node.js, v0.0.75 now has built-in integration with applied-science/js-interop! This means you can run this example with stock nbb:
(ns example
  (:require [applied-science.js-interop :as j]))

(def o (j/lit {:a 1 :b 2 :c {:d 1}}))

(prn (j/select-keys o [:a :b])) ;; #js {:a 1, :b 2}
(prn (j/get-in o [:c :d])) ;; 1
See https://github.com/borkdude/nbb#js-interop and #nbb for more. Thanks Matt Huebert for co-operating on this.
#2021-09-1921:15ribelodoxa is a simple in-memory database, trying to copy the best solutions from `datascript`, `crux`, `fulcro`, `autonormal`, `kechema`, `shadow-grove` I finally finished something between poor man . incrementally maintained views and in the meantime, I also completely rewrote datalog query parsing and many other things. all using meander of course, just because I can 🙃 https://github.com/ribelo/doxa#caching--matching#2021-09-1921:51Jakub Holý (HolyJak)Interesting. What is shadow-grow?#2021-09-1921:58ribelohttps://github.com/thheller/shadow-experiments/tree/master/src/main/shadow/experiments/grove#2021-09-1921:58ribelomore specifically https://github.com/thheller/shadow-experiments/blob/master/src/main/shadow/experiments/grove/db.cljc#2021-09-2017:11metasoarousIs this actually differential dataflow, or just incrementally maintained views which fall back to re-evaluation from scratch when there's a recursive query?#2021-09-2017:26ribelotoo difficult question for me @U05100J3V#2021-09-2017:26ribelo😉#2021-09-2017:26ribeloI'm not sure I know the definition#2021-09-2017:27metasoarousNo worries 🙂#2021-09-2017:28ribeloIn general, the scheme looks like this#2021-09-2017:28ribelo
transaction -> diff -> match diffs -> re-run queries
#2021-09-2017:29ribeloafter each transaction the diff is calculated using editscript#2021-09-2017:29metasoarousThat's not differential dataflow. That's effectively what posh is doing.#2021-09-2017:29metasoarous(I know posh has some edge cases, but still; That's the basic methodology)#2021-09-2017:30metasoarousWhich is fine, but I'd suggest not trying to market it using that terminology, because it might catch folks off guard expecting it to be something it's not.#2021-09-2017:31ribeloposh from what I remember matches not diffs but transactions#2021-09-2017:31ribelobut I guess it doesn't matter#2021-09-2017:32metasoarousNo, it doesn't match transactions, but rather the datoms (diffs, effectively) produced by the transactions#2021-09-2017:32ribelothat's what I meant#2021-09-2017:33ribelobut again, as far as I remember, there is no difference check and a transaction that changes nothing also causes recalculation of queries#2021-09-2017:36ribelothanks @U05100J3V, I corrected the description#2021-09-2017:50metasoarousYou're welcome; Thanks for clarifying.#2021-09-2000:12seancorfield
clojure -Ttools install io.github.seancorfield/deps-new '{:git/tag "v0.3.0"}' :as new
https://github.com/seancorfield/deps-new • Adds template project generation, so you can create your own deps-new templates more easily. • Fixes a bug in :transform handling while copying files that were not explicitly listed. • Fixes a bug in the group/artifact ID used in generated build.clj files. Follow-up in #deps-new
#2021-09-2105:07robert-stuttafordfyi @U04V70XH6 when i run this command with clojure 1.10.3.967:
-T is no longer supported, use -A with repl, -M for main, or -X for exec
#2021-09-2105:09robert-stuttafordnot sure if this is a me problem or not 😄#2021-09-2105:10seancorfieldAre you sure about that version?#2021-09-2105:12robert-stuttaford.... now i'm not. i'll dig#2021-09-2105:13seancorfield1.10.1.697 had that message https://github.com/clojure/brew-install/blob/1.10.1.697/src/main/resources/clojure/install/clojure#L47#2021-09-2105:14robert-stuttafordwhen i look these two ways, it lines up:
brew info clojure/tools/clojure
clojure/tools/clojure: stable 1.10.3.967
The Clojure Programming Language

/usr/local/Cellar/clojure/1.10.3.967 (11 files, 15.4MB)
  Built from source on 2021-09-02 at 07:34:08
From: 
License: EPL-1.0
==> Dependencies
Required: rlwrap ✔
==> Analytics
install: 2,891 (30 days), 7,866 (90 days), 44,626 (365 days)
install-on-request: 2,883 (30 days), 7,834 (90 days), 44,356 (365 days)
build-error: 0 (30 days)
$ clojure
Clojure 1.10.3
user=> (clojure-version)
"1.10.3"
user=>
#2021-09-2105:14robert-stuttafordok, i'll spelunk and see if i somehow have more than one installed! sorry for the noise 🙂#2021-09-2105:19seancorfield1.10.3.899 was the first version since then that did not have that message.#2021-09-2105:19seancorfieldwhat does clojure -version or clojure -Sdescribe say?#2021-09-2105:20robert-stuttafordi found it. i have that version installed too. my goodness.#2021-09-2105:21robert-stuttafordagain, apologies for the noise, @U04V70XH6!#2021-09-2105:21seancorfieldNP. I knew it was an old CLI message so I knew you were not running that version 🙂#2021-09-2105:23robert-stuttafordyour excellent knowledge just saved me a lot of potential trouble here haha#2021-09-2002:55djblueThe portal data inspector has a new release, 0.15.1. Some highlights are: a new hex/ascii viewer for binary data and initial support for remote runtimes via socket repl. For more details see https://github.com/djblue/portal/releases/tag/0.15.1#2021-09-2006:38djbluehttps://clojurians.slack.com/archives/C0185BFLLSE/p1632119799019600?thread_ts=1632112543.018300&amp;cid=C0185BFLLSE, try 0.15.1 👌#2021-09-2107:51Carsten BehringI am proud to announce a new release of the clj-py-r template for Clojure. It creates a template Clojure project with a Dockerfile, which allows to use python, R and Julia(new in 1.4.0) from a Docker based nrepl without any configuration. See here for more information: https://github.com/behrica/clj-py-r-template#2021-09-2116:08metasoarousSomehow I missed that you'd released this; This is great!#2021-09-2110:32oliyI've released a new ring-compatible HTTP library for cljs, cljs-http-promise https://github.com/oliyh/cljs-http-promise It's a fork of the popular https://github.com/r0man/cljs-http but returns promises instead of core.async channels which hopefully give better semantics. There is also a new martian package for it as well: https://github.com/oliyh/martian/tree/master/cljs-http-promise#2021-09-2113:40Alex Miller (Clojure team)Clojure CLI 1.10.3.981 is now available https://clojure.org/releases/tools#v1.10.3.981 • Fix nested session cache computation for local pom model building • Update to latest AWS API libs • Downgrade Maven resolver libs to better match Maven core libs • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1048#2021-09-2115:38Dimitar UzunovThanks for the release! Will the resolver changes help with https://clojure.atlassian.net/browse/TDEPS-207 ?#2021-09-2115:44Alex Miller (Clojure team)in one case we can repro, yes, but I am not confidant that it is "the" answer#2021-09-2212:39nonrecursivehey y’all, I’ve re-built https://jobs.braveclojure.com/. I want the site to be as useful as a job board possibly can be to the Clojure community. The biggest change to get there is that the service is now freemium: any company can post unlimited listings for free, or become a sponsor to share the ad in more channels and get better placement. I’m hoping this will help everybody and make it sustainable for me to continue improving the service. More thoughts on that in this https://jobs-blog.braveclojure.com/2021/09/20/a-better-clojure-job-board.html. I’d love any feedback 🙂 This community’s been so good to me and it feels good to try to contribute more.#2021-09-2223:05Alex Miller (Clojure team)Clojure CLI 1.10.3.986 is now available https://clojure.org/releases/tools#v1.10.3.986 • Fix nested session cache computation for local pom model building (last release accidentally did not actually include this fix, oopsie) • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1048#2021-09-2303:14Chris McCormickHey all, yesterday I banged out this little prioritization app in cljs: https://riceprioritization.com/ It's a way to help you prioritize your projects/tasks/options using the RICE method. You can find the source code here: https://github.com/chr15m/riceprioritization.com PRs most welcome. Enjoy!#2021-09-2306:07robert-stuttafordthis is really cool! may i suggest including a sample data set so that it's easy to see how the system works?#2021-09-2309:21Chris McCormickGood idea, thanks!#2021-09-2822:36Chris McCormickI added a sample data set as per your suggestion, thanks!#2021-09-2905:57robert-stuttafordneato, thanks!#2021-09-2404:45pfeodrippeReleased v0.0 of Pitoco. https://github.com/pfeodrippe/pitoco, a OSS library to help you check your endpoint schemas (using spec-provider, Malli and Pathom). See quick video at https://youtu.be/iMcUTygFrfk. Totally inspired by what Akita Software has been doing.#2021-09-2409:42borkdudeAnnouncing clj-easy/graal-config! https://github.com/clj-easy/graal-config A repo that hosts configurations for Clojure and Java libraries that you can use a dependencies in your native-image builds! Join #clj-easy for more info on this.#2021-09-2411:08delaguardoThanks! Very clever solution to provide such configuration) btw. there is a github action to provision different versions of graalvm as a part of your workflow - https://github.com/marketplace/actions/setup-graalvm-environment#2021-09-2411:11borkdudeYes, I recommended this to @UJ1339K2B but he told me that this doesn't support setting up a development version.#2021-09-2411:21Karol Wójcik@U04V4KLKC yep. Having dev version of Graal would be much appreciated #2021-09-2411:22Karol WójcikDoes the action allows setting multiple Graal versions? If yes where the action set’s the base directory for each?#2021-09-2411:27borkdudeI think the point of this setup action is that it adds one version to the environment, we have a slightly different use case, or we should re-organize things in different jobs#2021-09-2411:27delaguardoI can add dev version today. each version installed in the separate directory following …/GraalVM/%graalvm-version%-%java-version%-%arch%/x64 notation. Also this action expose a set of environment variables: • JAVA_HOME • JAVA_HOME_%graalvm-version%.%java-version%.%arch% • GRAALVM_HOME first and last will be overwritten by the last action run but second will be present for every followup steps#2021-09-2411:27borkdudeah right#2021-09-2411:27delaguardoso it is possible to provision multiple graalvm versions#2021-09-2411:27borkdudeso then you can just do setup-graalvm, execute test, setup-graalvm v2, execute test, etc.#2021-09-2411:28borkdudesetting GRAALVM_HOME is excellent because this is what most tools already use#2021-09-2411:28borkdudePerhaps you can make it so that setup-graalvm adds always the latest dev version#2021-09-2411:28borkdudeThis will also solve the problem for us that our builds will fail when the dev version is removed#2021-09-2411:29delaguardoyes, I’m already working on it while we are speaking )#2021-09-2411:30borkdudecool! 🙏#2021-09-2411:30Karol WójcikOr we can override GRAALVM_HOME from our test suite :D#2021-09-2411:31borkdude@UJ1339K2B I think we can just make a github matrix and use setup-graalvm#2021-09-2411:32Karol WójcikAh right.#2021-09-2411:32Karol WójcikCool idea.#2021-09-2411:33Karol WójcikThank you @U04V4KLKC :man-bowing:🙏🙏#2021-09-2412:53delaguardohttps://github.com/DeLaGuardo/setup-graalvm/pull/20/checks?check_run_id=3700067176 I manage to add suport for latest nightly build. But it requires slight adjustments in workflow file. 1. graalvm: “nightly” 2. personal-token: ${{ secrets.GITHUB_TOKEN }} #2021-09-2412:55delaguardoright now it exposes the same set of env variables except JAVA_HOME_%version%. Because version is unknown before run I expose “JAVA_HOME_NIGHTLY”#2021-09-2412:55borkdudeThat's not a problem#2021-09-2412:56borkdudeThanks!#2021-09-2413:05delaguardoreleased as 5.0 version#2021-09-2411:48Ivar RefsdalI'm pleased to announce yoltq, a queue library for Datomic that supports retries, backoff, ordering and more. On-prem only. https://github.com/ivarref/yoltq#2021-09-2423:06Jeff EvansAnnouncing the first release of java-case, a tiny utility macro for concisely selecting different forms based on the executing JDK version. https://github.com/jeff303/java-case This is my first Clojure library, so all suggestions/feedback welcomed.#2021-09-2423:22seancorfieldNice! I have a use for this at work immediately to replace the ad hoc stuff we're currently doing. And thank you for using clj-new and build-clj!#2021-09-2500:42Jeff EvansThanks, Sean. Great to hear. And yeah, clj-new definitely made it super easy to publish to Clojars, which was nice.#2021-09-2601:04seancorfieldcom.github.seancorfield/honeysql {:mvn/version "2.0.813"} -- Turn Clojure data structures into SQL! -- https://github.com/seancorfield/honeysql/releases/tag/v2.0.813 -- quite a few enhancements since the gold release a month and a half ago! Follow-up in #honeysql#2021-09-2710:19Vladislavthanks!#2021-09-2712:08plexusThe first release of Deja-Fu is out, a lightweight "local" date/time library for ClojureScript https://github.com/lambdaisland/deja-fu#2021-09-2812:27henryw374I found the readme is a bit vague on the kind of scenarios where going lightweight would be worthwhile, so I have done an experiment, written up here: https://widdindustries.com/clojurescript-datetime-lib-comparison/ tl;dr, for a cljs React app, going lightweight is not worthwhile. Happy to be shown I'm wrong.#2021-09-2810:07borkdudeAnnouncing: neil https://github.com/babashka/neil A CLI which adds common features to your #clojure deps.edn projects. It's installable with Homebrew. If this is useful to you, I'd be happy to receive more features. Neil is made with #babashka :)#2021-09-2810:10Karol WójcikWould it be possibile to manage configs from graal-config with neil? Or it's not a scope of this tool?#2021-09-2810:11borkdudePerhaps, haven't thought about it yet.#2021-09-2810:11borkdudeThe first thing I'd like to fix is the formatting of the deps.edn which is a bit off.#2021-09-2812:02eskosSo the name is a donk at Lein(ingen)? In that context, is the envisioned scope to gather all the new low level things such as new build tools and deps.edn and combine them into an actual build integration tool through neil or is it just a way to have shorthands for aliases?#2021-09-2812:04borkdude@U8SFC8HLP I plan to add the ability to inject tasks into a bb.edn and then you can use bb test to run tests in your project for example. This gives you some of the UX that lein has but still with the possibility to tweak things.#2021-09-2812:04borkdudebut I want to make this optional so this tool can be used in a non-opinionated way#2021-09-2812:06eskosRighto 🙂 This matters to me only in the sense that I want to understand where this whole uneaseness with Lein getting disfavored is going to go in the long run… I’m not so sure on the non-opinionated part, but that’s a separate discussion. Your goals for this sounds good 🙂#2021-09-2812:06borkdudewe'll see how it evolves :)#2021-09-2812:07borkdudeI find myself adding build.clj files to deps projects because depstar is deprecated so that fulfills the goal of this tool for me right now#2021-09-2812:11borkdudefor fun we could add neil test :only foo.bar which then invokes clojure -M:test -n foo.bar or so :P#2021-09-2812:13borkdudeI'm willing to receive a PR for that :P#2021-09-2812:39kwrooijenI'd like to see neil being able to run tasks. Being able to manage (most) thinks within an easy to understand tool would also be good for beginners#2021-09-2812:39kwrooijenclj cli just doesn't seem friendly enough (compared to lein)#2021-09-2812:40borkdudelike neil test :only foo.bar ?#2021-09-2812:40kwrooijenYeah exactly#2021-09-2812:41borkdudeyeah I agree#2021-09-2812:41borkdudePR welcome :)#2021-09-2812:41kwrooijenI'll see if I have the time budget 😬#2021-09-2812:41borkdudehehe no worries, no hurry#2021-09-2812:41borkdudejust collecting ideas is already valuable#2021-09-2812:42kwrooijenMight want to think this through a bit more#2021-09-2812:42kwrooijenWould be great to have configurable tasks (where the CLI tool shows you all options and such)#2021-09-2812:42borkdudeThis is already what bb tasks is, have you used that?#2021-09-2812:42kwrooijenhmm no I haven't#2021-09-2812:42kwrooijenI'll look into that#2021-09-2812:43borkdudehttps://book.babashka.org/#taskshttps://www.youtube.com/watch?v=u5ECoR7KT1Y#2021-09-2813:41lreadCool! You have a real skill in naming your projects!#2021-09-2814:02Johan ThorénNaming is actually one of the hardest things in programming.#2021-09-2817:57Steven DeobaldAdds calendar invite for 2031. "See who remembers why this thing is called neil."#2021-09-2822:06borkdudeAdded some new options: https://twitter.com/borkdude/status/1442963045752483841#2021-09-2906:47jumar@U04V15CAJ I tried to install neil with
brew install babashka/brew/neil
but it failed:
==> Tapping babashka/brew
Cloning into '/usr/local/Homebrew/Library/Taps/babashka/homebrew-brew'...
remote: Enumerating objects: 44, done.
remote: Counting objects: 100% (44/44), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 44 (delta 7), reused 43 (delta 6), pack-reused 0
Receiving objects: 100% (44/44), 5.42 KiB | 1.81 MiB/s, done.
Resolving deltas: 100% (7/7), done.
Error: Invalid formula: /usr/local/Homebrew/Library/Taps/babashka/homebrew-brew/Formula/
#2021-09-2906:50jumarI had an ancient version of babashka so tried to upgrade it just in case but neil install is still failing.#2021-09-2906:52borkdudeWeird. Can you make an issue? Perhaps you need to update brew as well?#2021-09-2907:28jumarbrew is typically auto-updated and an explicit update didn't help. I created https://github.com/babashka/neil/issues/5#2021-09-2907:28jumarBtw. manual installation works fine.#2021-09-2907:29borkdudeThanks. I'll look into if I can reproduce it. Can you also mention the brew version, macos or linux version?#2021-09-2908:34borkdudeFixed#2021-09-2909:59borkdude@U06BE1L6T Something else was wrong, now also fixed#2021-09-2910:00borkdudeAnd added another feature:
$ neil add dep borkdude/sci :latest-sha true
$ cat deps.edn
{:deps {borkdude/sci {:git/url ""
                      :git/sha "a0dd7fa2a087ed1f524fd22cb73139f571ff469d"}}
 :aliases {}}
#2021-09-2910:25Karol WójcikDoes this feature works somehow with our graal-config? 😄#2021-09-2910:25Karol WójcikIf yes we can put the usage in the description : )#2021-09-2910:26borkdude@UJ1339K2B Hmm, we could add neil add dep clj-easy/graal-config :deps/root taoensso.timbre#2021-09-2910:27Karol WójcikOh, yes pleeease ❤️#2021-09-2910:28Karol WójcikBut probably we have do differentiate the graal-config from the regular dependencies, since it's multi artifact deps.edn monorepo#2021-09-2910:30borkduderight#2021-09-2910:31borkdudewe have to make a separate command for it :)#2021-09-2910:31borkdudeneil add graal-config taoensso.timbre#2021-09-2910:35borkdudebut we also support :as com.github.clj-easy/graal-config-cheshire#2021-09-2910:36borkdudeor wait no you can just use that name#2021-09-2910:36borkdudeno that won't work#2021-09-2910:36borkdudeso :as should be good#2021-09-2913:09Karol WójcikI have tried:
neil add dep com.github.clj-easy/graal-config :deps/root config/com.taoensso/nippy :as com.github.clj-easy/graal-config-nippy :latest-sha
But this add a dependency with {:mvn/version nil}
#2021-09-2913:42borkdudeWell this option isn’t implemented yet. Also you should provide true to latest sha #2021-09-2914:05borkdudeI'll work on this now#2021-09-2914:25borkdude@UJ1339K2B Should work now:
$ neil add dep com.github.clj-easy/graal-config :deps/root config/com.taoensso/nippy :as com.github.clj-easy/graal-config-nippy :latest-sha true
$ cat deps.edn
{:deps {com.github.clj-easy/graal-config-nippy {:git/url ""
                                                :git/sha "7a2cc5b1b1652580e26d990cf5bac2ed48247b7e"
                                                :deps/root "config/com.taoensso/nippy"}}
 :aliases {}}
in neil v0.0.11
#2021-09-2914:26borkdudeoops one bug#2021-09-2914:26borkdudethe git/url isn't correct#2021-09-2914:27Karol WójcikYeah 😄#2021-09-2914:27Karol WójcikBut, we almost got it 😄#2021-09-2914:30borkdudeShould be fixed in v0.0.12#2021-09-2915:13eskosThis is so minor irrelevance but wouldn't :sha/latest read better than :latest-sha :)#2021-09-2915:13eskosDunno which part would even be responsible of that in this stack...#2021-09-2915:16borkdudeI'm not sure if all options should be namespaced keywords ;)#2021-09-2915:16borkdudegit/sha, sha/git, ...#2021-10-0416:40vnczQuestion: did you think about integrating this as a Clojure tool?#2021-10-0416:41vncz@U04V15CAJ https://clojure.org/reference/deps_and_cli#_using_named_tools#2021-10-0416:46borkdude@U015VUATAVC I have considered this, but one of the goals of neil was to see if it's feasible to package a bb script as a standalone brew/scoop/nixos package#2021-10-0416:46borkdudeI might make a tool version of this later on. But one of the benefits of having it as a bb script is that it's fast. I don't want to wait a few seconds to add something to my deps.edn#2021-10-0416:47vnczFair#2021-09-2821:10KelvinAt Yet Analytics, we've recently open-sourced a core product written in Clojure - lrsql (aka SQL LRS). This project uses HugSql to interface with three different SQL backends (H2, SQLite, and Postgres) to store learning data. As part of the lrsql development process, we released colossal-squuid, an open-source Clojure(script) library that generates sequential UUIDs (SQUUIDs) which follow the https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format. We use SQUUIDs in lrsql as primary key IDs, where their strict monotonicity makes them useful as query cursors. lrsql repo: https://github.com/yetanalytics/lrsql colossal-squuid repo: https://github.com/yetanalytics/colossal-squuid#2021-09-2909:50Ivar RefsdalGreat idea and project! It will surely be useful for the company where I wok. I submitted an issue now that proves and proposes a fix for a race condition.#2021-09-2917:51KelvinA fix has been applied: https://github.com/yetanalytics/colossal-squuid/pull/11#2021-09-3007:27pithyless@U02FU7RMG8M are you familiar with mulog's flake [0] and if so, can you share some insight on pros/cons of choosing one library over the other? Asking as someone who has not studied the code for colossal-squuid yet, so feel free to just respond "RTFM". :) [0] https://github.com/BrunoBonacci/mulog/blob/master/mulog-core/java/com/brunobonacci/mulog/core/Flake.java#2021-09-3015:46KelvinNever heard of it before so I'm reading through it, and two three things stood out: • Flake.java is part of a larger library, which in turn has a bunch of dependencies. Not only is colossal-squuid one library dedicated to generating SQUUIDs, I designed it to not have any dependencies at all (Clojure(script) and test deps excepted). • The IDs Flake.java generates are not UUIDs, which may not be optimal for applications that prefer UUIDs (e.g. certain DBMSs like Postgres have special optimized UUID types). • colossal-squuid has Clojurescript/JS support, while Flake.java is for, well, Java only.#2021-09-3017:20KelvinOne con of colossal-squuid vs Flake.java is performance; these are times measured on Java 11.0.10 on my machine (MacOS High Sierra with an i7 processor):
(criterium.core/bench (squuid/generate-squuid))

Evaluation count : 245862600 in 60 samples of 4097710 calls.
             Execution time mean : 247.688222 ns
    Execution time std-deviation : 16.444680 ns
   Execution time lower quantile : 235.489134 ns ( 2.5%)
   Execution time upper quantile : 284.262079 ns (97.5%)
                   Overhead used : 6.380512 ns

Found 3 outliers in 60 samples (5.0000 %)
	low-severe	 2 (3.3333 %)
	low-mild	 1 (1.6667 %)
 Variance from outliers : 50.0896 % Variance is severely inflated by outliers

(criterium.core/bench (str (squuid/generate-squuid)))

Evaluation count : 214467540 in 60 samples of 3574459 calls.
             Execution time mean : 289.453769 ns
    Execution time std-deviation : 21.778366 ns
   Execution time lower quantile : 273.336325 ns ( 2.5%)
   Execution time upper quantile : 340.385667 ns (97.5%)
                   Overhead used : 6.380512 ns

Found 8 outliers in 60 samples (13.3333 %)
	low-severe	 3 (5.0000 %)
	low-mild	 5 (8.3333 %)
 Variance from outliers : 56.7680 % Variance is severely inflated by outliers
So generating a SQUUID is about 7 times slower than generating a Flake, and with string conversion it's about 3.5 4 times slower.
#2021-09-3017:45KelvinFor purposes of fair comparison, I rebenched Flake generation on my machine. Generating flakes w/o string conversion was similar to the listed time (35 ns), but w/ string conversion it was better (69 ns).#2021-10-0106:19Ivar RefsdalI will chip in with a small observation: Flake provides monotonicity per thread, whereas colossal provides monotonicity per JVM. I doubt that makes a big difference in practice for an application, but I find the latter neater. I'm no performance expert, but I suppose that (synchronization guarantees) might also explain some of the performance differences. Side note: μ/log looks like a great and interesting project. Another option for squuids can be the datomic api. Downsides: closed source. No easy way to get from millis to squuid as far as I know. https://docs.datomic.com/on-prem/clojure/index.html#datomic.api/squuid#2021-10-0116:42pithylessThank you all for the observations, this is exactly what I was hoping for. I was considering porting flake to CLJS, so colossal library arrives on the scene at a great time. :) (Datomic - and DataScript - both have a squuid function, but unlike flake and colossal, they make no attempt to be monotonic).#2021-10-0116:45pithylessThanks @U02FU7RMG8M and @UGJE0MM0W for following up! gratitude#2021-12-1911:07zeitstein@U02FU7RMG8M Is there a way to obtain the timestamp from an already generated squuid?#2021-12-2014:20KelvinHere's how you can do it in Clojure:
(let [squuid (generate-squuid)
      squuid-fst-48-bits (bit-shift-right (.getMostSignificantBits squuid) 16)]
  (java.util.Date. squuid-fst-48-bits))
It's just a matter of extracting the first 48 bits and coercing them into a timestamp. For future reference, generate-squuid* returns a map that includes the timestamp used for generation for you.
#2021-12-2014:25zeitsteinThank you!#2021-12-2014:57zeitsteinCould I trouble you for the CLJS version? Sorry, really unfamiliar with bit manipulation 😕#2021-12-2119:21KelvinUnfortunately it'll be harder in CLJS since JavaScript UUIDs are stored as strings, so you'll have to do string parsing before you can do anything interesting with them.#2021-12-2122:02KelvinI'm pretty sure you can hack up a solution by using a tool like https://github.com/domske/uuid-tool to parse the UUID into a number array, then perform array manipulations and arithmetic to get an integer that you can convert into a Date object. But it would be ugly.#2021-12-2122:03KelvinAnyways since you did mention you were unfamiliar with bit manipulation, let me explain what's going on in that code snippet: 1. .getMostSignificantBits simply takes the "most significant" half of a UUID, i.e. the ones with the greatest value. (Think of how in the number `12`, the `1` is the "most significant" digit while the `2` is the "least significant" one.) For example, the most significant bits of the UUID `017ddefd-951d-8485-a6cf-6820da6769c3` are `017ddefd-951d-8485`. 2. bit-shift-right literally shifts bits in a bit array to the right; the `16` refers to by how many bits they were shifted. For example, in the bit array `0000111100001111`, if we shift by 4 bits, will become `000011110000`, since the last 4 bits were shifted "off the map." Likewise, bit shifting `017ddefd-951d-8485` will result in `017ddefd-951d` (note that each hex digit is 4 bits long, since that's how many bits are needed to represent any number between `0` and `f`/`15`). 3. The `java.util.Date` has a constructor that accepts a long value (which all Clojure ints are), so if given 017ddefd-951d it instantiates a Date instance with value `2021-12-21T21:55:00.509-00:00`.#2021-12-2214:15zeitsteinThank you so much, really kind of you!#2021-12-2215:46zeitsteinAlright, this seems to do it:
(-> (squuid/generate-squuid)
      str
      (subs 0 13)
      (clojure.string/split "-")
      (clojure.string/join)
      (js/parseInt 16)
      (js/Date.))
Thank you, @U02FU7RMG8M! Are you interested in offering such a function in the library?
#2021-12-2215:50KelvinPerhaps. I'll have to think about it since I'd want to keep colossal-squuid minimalistic, but if people would like such a function I'd do it. Also, I like how for your cljs solution you didn't use any external libs - you kept the spirit of colossal-squuid being dep free!#2021-12-2215:57zeitsteinIt's simple enough to write on your own (having seen it), but the implementation would be several lines (re: minimalism). Datomic/Datascript include such a function, which speaks to demand, perhaps?#2021-12-2216:29zeitsteinWould be happy to provide a PR, if you'd like.#2021-09-3008:40vemvnvd-clojure + lein-nvd - https://github.com/rm-hull/nvd-clojure/blob/1.7.0/CHANGELOG.md - security checker The Github repo is now named nvd-clojure to emphasize that it's compatible with Lein and deps.edn alike. For both tool chains, the recommended (but not enforced, yet) way of running it is described in https://github.com/rm-hull/nvd-clojure/tree/1.7.0#avoiding-classpath-interference. This cleaner approach has allowed us to get the issue count down to zero. Let us know how it works for you - enjoy!#2021-09-3008:51dharriganGreat stuff! Been waiting for this! You may want to consider adjusting the project description for it reads National Vulnerability Database dependency-checker plugin for Leiningen, without also mentioning deps 🙂#2021-09-3012:22steveb8nBrilliant. I've been running this in CI but it wasn't loading the deps. I'll try this new version and will report back. Thanks!#2021-09-3020:51seancorfieldThank you for this @U45T93RA6 A note for the readme: in that section about avoiding classpath interference, it suggests running the tool outside the project folder but if you do that, it complains about directory paths that are on the classpath that it can't find. Maybe filter the classpath to just the .jar files?#2021-09-3023:11vemvHow does the complaining look like? Never seen that In case it helps, that passage is suggesting something like this:
#!/bin/bash
set -Eeuxo pipefail

NVD_DIR="$PWD/.circleci/nvd"
# calculate a production classpath within the main project:
CLASSPATH="$(clojure -Spath)"

DEPENDENCY_CHECK_COMMAND="clojure -M:nvd $NVD_DIR/nvd-config.json $CLASSPATH"

# cd into a different project defining its own, minimal deps.edn:
cd "$NVD_DIR" || exit 1

# Try a few times in face of flakiness from dependency-check-core:
eval "$DEPENDENCY_CHECK_COMMAND" || eval "$DEPENDENCY_CHECK_COMMAND" || eval "$DEPENDENCY_CHECK_COMMAND"
#2021-09-3023:43seancorfield
(! 891)-> clojure -M:nvd "" "$(cd /Developer/workspace/wsmain/clojure && clojure -Sforce -Spath -A:dev:everything)"
Downloading: nvd-clojure/nvd-clojure/maven-metadata.xml from clojars
Execution error (AssertionError) at nvd.task.check/-main (check.clj:134).
Assert failed: The classpath variable should be a vector of simple strings denoting existing files. development/resources
(.exists f)
Because the classpath has relative paths on it and those are relative to the target project directory, not the directory where NVD is run.
#2021-09-3023:44seancorfieldPer your README:
For extra isolation, it is recommended that you invoke nvd.task.check from outside your project - e.g. from an empty project, a git clone of this very repo, or from $HOME
#2021-09-3023:44seancorfield☝️:skin-tone-2: That won't work because it checks .exists on the classpath entries and fails if they don't.#2021-09-3023:45seancorfield(it's a minor issue -- running it in the project folder, with a separate classpath works great for me since I do not have anything in :deps in my project's deps.edn -- it's all in aliases)#2021-09-3023:48vemv> That won't work because it checks `.exists` on the classpath entries and fails if they don't. That makes sense but I wonder how I've managed to never experience this. I have a CI setup where the inner project will receive entries such as test-resources which certainly don't exist within it Either way I'll fix it#2021-09-3023:51vemv> (it's a minor issue -- running it in the project folder, with a separate classpath works great for me It's not necessarily the same. If your production classpath defines something that happens to overlap with these https://github.com/rm-hull/nvd-clojure/blob/370428eb6b947136d7c39aefd2161a642cf0801e/project.clj#L6-L29 , your project's versions may win over nvd's, creating opaque issues. I've certainly observed that under Lein. Not so sure about deps.edn but either way I wouldn't write a 'blank cheque' trusting the build tool's dep/alias resolution to do the right thing. Those are plausibly subject to change.#2021-10-0100:00vemvok so I see what was wrong with the check https://github.com/rm-hull/nvd-clojure/blob/370428eb6b947136d7c39aefd2161a642cf0801e/src/nvd/task/check.clj#L133-L140 - it only checks the first and last items from the classpath. This is not so deterministic. (The intent of that check was focused on format, not comprehensive file existence, so checking a subset made sense. clojure.spec does this for large collections)#2021-10-0101:44seancorfieldAh, yeah, t.d.a puts paths at the front of the classpath so you're pretty much bound to get a directory that won't exist if you run the command in a different directory.#2021-10-0101:46seancorfieldRe: "blank cheque" above -- I can trust my context at work because the only thing pulled in by default is
:deps ; used by all projects
 {org.clojure/clojure {:mvn/version "1.11.0-alpha2"}}
So when I run clojure -M:nvd ... the only things on the classpath is your nvd-clojure via the :nvd alias in my dot-clojure file and Clojure 1.11 Alpha 2.
#2021-10-0101:47seancorfieldOh, and I added :nvd to my public dot-clojure file and documented it in the README to encourage more people to use it!#2021-10-0101:50vemvah, got it, so your production classpath is "opt-in" :) interesting.#2021-10-0101:52seancorfieldPolylith. Without :dev, there is nothing 🙂#2021-10-0101:52vemvbtw, from your example -A:dev:everything appears to check more than needed (`dev` in particular). (Might have been simply a one-off experiment?) Checking vulns for dev tooling can plausibly frustrate people Either way I'll fix this thing#2021-10-0101:54vemvRe polylith, it might have some value to check nvd for each module (whatever it's called, sorry). If you check only for the final app to be assembled, you'll be testing the final computed classpath. Maybe a module has a vuln that is later overriden.#2021-10-0102:12seancorfield@U45T93RA6 You don't know anything about Polylith 🙂 :dev is the basic set of components (with all their transitive dependencies). It's essentially the "default" in non-Polylith (perhaps non-monorepo) projects.#2021-10-0102:12seancorfieldAnd :everything is simply our equivalent for the non-Polylith code in our repo.#2021-10-0102:13seancorfieldclojure -Spath -A:dev:everything is the production code (with one additional :extra-paths entry -- which doesn't impact NVD CVE checking).#2021-10-0102:14seancorfieldIf I had added :test (Polylith's view of testing), :runner (our legacy equivalent), or :build, then yes, it would have "check[ed] more than needed" and would have included "dev tooling". I'm not stupid -- I know how our repo is setup 🙂#2021-10-0102:16seancorfield(and it actually was quite interesting to see the delta of CVEs in production code vs the stuff that shows up in the dev/test/build tooling -- several were transitive dependencies of HtmlUnit, even with the most recent versions of everything pinned)#2021-10-0102:16vemv:dev has a pretty well-established meaning in the vast majority of clj projects. Do you have an alias called :really-dev or something? (I'm assuming there's a "dev" and "test" separation e.g. no IDE-like tooling for running test suites)#2021-10-0102:17seancorfieldYeah, Polylith's :dev isn't really like most other project's :dev aliases.#2021-10-0102:18seancorfieldFor us, there's no difference between the union of the individual projects and the :dev "project" view, except one one of the projects has to pin an older version of Jackson due to breaking changes they made that we haven't worked around yet.#2021-10-0102:18seancorfieldAll the other projects have a later version of Jackson with no CVEs.#2021-10-0102:19seancorfieldPolylith's way of running tests is based on the :test alias in each of the projects or the :test alias in the top-level (workspace) deps.edn file.#2021-10-0102:20seancorfieldAnd I use zero IDE tooling inside the project: plain socket REPLs, with some aliases adding stuff from my dot-clojure file (`revealportal:dev/repl`) so none of that is accessible to nvd-clojure.#2021-10-0102:21seancorfieldI guess another option with nvd-clojure would be to use :replace-deps so the :nvd alias will then ignore the project deps altogether. Or install nvd-clojure as a "tool" (in clojure -T terms).#2021-10-0102:38vemvReplace thingies make me a bit nervous (especially in Leiningen) but clojure -T seems inherently decoupled from a project. (A "constraint" for the readme is that I should keep it minimalistic and generic for both build tools, and not invite newcomers to do the wrong thing. I have pending related work for the readme in this direction) If you have the chance to contribute the right clojure -T incantation that PR would be most welcome :)#2021-10-0102:54seancorfieldLeiningen is not necessarily a good bar to judge anything against 🙂 For -T, you need a -X compatible entry point. Happy to take a look and send a PR.#2021-10-0106:12seancorfieldOK, PR up for tool install/usage.#2021-09-3010:54borkdudeSCI v0.2.7: a Clojure/Script interpreter, used in #babashka, #nbb and many other projects. This release focuses on: - Improvements regarding CLJS compatibility (interop, js literals, printing via *print-fn*) - Adding more dynamic vars related to printing - Exposing sci/stacktrace and sci/format-stacktrace for getting a stacktrace from a SCI exception. This allows you to build an error report like babashka and similar tools built with SCI. https://github.com/borkdude/sci/blob/master/CHANGELOG.md#v027#2021-09-3016:14ericdalloclojure-lsp Released https://clojure-lsp.io/ 2021.09.30-15.28.01 with a lot of fixes and improvements, one of them is better feedback during server initialization loading 🚀 For more info check #lsp#2021-09-3020:45just.sultanovThe first release of Secret Keeper has been released. It’s a Clojure(Script) library for keeping your secrets under control. https://github.com/sultanov-team/secret-keeper/tree/0.3.61#2021-09-3020:49metasoarousThis is great! Thanks for the release! Any idea when this might be considered non-alpha?#2021-09-3020:54just.sultanovThe basic API is stable and no changes are expected. I want to add Secret’s schema, validator, and ring middleware. It doesn’t affect the current API#2021-09-3020:57metasoarousCool; Thanks!#2021-10-0209:07Chris McCormick@U1QQJJK89 #spire?#2021-10-0108:58borkdudeAnnouncing api-diff , a tool that you can use to compare two mvn libraries or two directories for breaking API changes and deprecations. I'd be happy to receive more features if that's useful to anyone. https://github.com/borkdude/api-diff#2021-10-0108:59martinklepschOooo, I’ve been wanting to add something like this to cljdoc for ages #2021-10-0201:04Oliver GeorgeThis feels like it’s so close to the idea of spec diffing to detect if a new lib materially changes used surface area. I love it. #2021-10-0515:22bedersI'm beginning to suspect that Borkdude is in reality a whole development team. How can you even???!!11#2021-10-1001:02Sam Ritchiedude has a huge hammock#2021-10-0210:44pezA new version of Calva just out, v2.0.213. It adds support for pure ClojureScript nREPL servers. Yes, there is such a thing now, see #nbb. As I think it might have been a while since we announced a new Calva version, let me include a few items from the top of the changelog: • Workaround https://github.com/BetterThanTomorrow/calva/issues/1308 • Fix https://github.com/BetterThanTomorrow/calva/issues/1290`calva.highlight.bracketColors`https://github.com/BetterThanTomorrow/calva/issues/1290 • Fix https://github.com/BetterThanTomorrow/calva/issues/1301https://github.com/BetterThanTomorrow/calva/issues/1283#2021-10-0221:00Asko NōmmYet another Clojure HTTP router has come to life, with zero dependencies, entirely data-structure based (no macros, no magic) https://github.com/askonomm/ruuter • Supports direct maps as responses as well as functions • Does not monkey around with anything else, keeping things as vanilla as possible. • Works with just about any HTTP server you can throw it, like http-kit, ring + jetty, etc. • Tiny!#2021-10-0221:49borkdudeThat's awesome. This library might even work in bb with the built-in httpkit server#2021-10-0221:53borkdude@U026NQLSBLH Yep it works!
(require '[babashka.deps :as deps])

(deps/add-deps '{:deps {org.clojars.askonomm/ruuter {:mvn/version "1.0.1"}}})

(require '[ruuter.core :as ruuter])

(def routes [{:path "/"
              :method :get
              :response {:status 200
                         :body "Hi there!"}}])

(ruuter/route! routes {:port 8082})

@(promise)
#2021-10-0221:56borkdudeI think you could even make this agnostic of httpkit and just provide a documentation example of how to use this with several other ring servers. Keeping it "vanilla" is a nice trade-off.#2021-10-0221:59Asko NōmmAwesome stuff! And you’re right, making it agnostic of http-kit would be as simple as removing the route! fn and making the router fn public, I think.#2021-10-0222:02borkdudeYou might not be aware of this, but people have been asking for a routing solution in bb for a long time but most routing libs come with a lot of baggage so I've resisted adding one so far and recommended people to build their own solution by dispatching on method and uri (using core.match for example). This library offers nice solution to this problem.#2021-10-0222:03borkdudeIn the future bb might switch to a different http server (not sure and will take a lot of time before the old one will be deprecated and eventually removed) but having this routing lib agnostic of server might be nice from that perspective.#2021-10-0223:03Asko NōmmI’m flattered that it could serve a useful purpose! Just pushed a new version 1.1.0 with updated documentation that is entirely decoupled from any HTTP server, and thus has no dependencies at all anymore! 🙂#2021-10-0223:04Asko NōmmExcept for Clojure itself, of course#2021-10-0308:22slipsetThis would be runnable in cljs as well?#2021-10-0314:44Asko NōmmThere’s no reason it shouldn’t be, but I think I have to change the file to .cljc for that? Right?#2021-10-0314:46borkdudecorrect#2021-10-0316:43Asko NōmmPushed an update, should now work with CLJS.#2021-10-0221:44uochanJust released vim-iced ver 3.7.0, Clojure Interactive Development Environment for Vim8/Neovim. https://github.com/liquidz/vim-iced Added support for @borkdude 's #nbb nrepl-server. Also updated instant connecting command to support nbb 🙂 https://twitter.com/uochan/status/1444417505506721793#2021-10-0809:32mkvlr🚀 Just released a very first preview version of Clerk, a local-first notebook built on top of regular Clojure namespaces: • io.github.nextjournal/clerk {:mvn/version "0.1.164"}. • Quickest way to play with it is cloning https://github.com/nextjournal/clerk-demo. • More info can be found in the https://nextjournal.com/mk/clerk-preview • My favorite notebook is https://storage.googleapis.com/nextjournal-cas-eu/data/8VwPbq6xWQadigCghK7KH5Q3WhUdCNU1d3LCgBnDNUJPyNH1Qw1JfDGFcBmCodHTY8rQDZDTS6UobY3dTLw4suxpGK#/notebooks%2Frule_30.clj 🕹️ Would really appreciate if folks took it for a spin and give feedback in #nextjournal on what can still needs to be improved before its open source release. 🙏:skin-tone-2:#2021-10-0812:15rickmoynihanlooks great and I managed to get it working; but the onboarding from the clerk-demo repo could be a little more straightforward. It could for example include an alias or user.clj that set it up to work. Also it looks like some of the notebook files don’t work out of the box; e.g. one of the examples includes jdbc, but it’s not in the deps.edn etc. Similarly some bits of the getting started snippet aren’t in the demo project; e.g. there’s no src directory. So you could perhaps integrate the getting started guide into the clerk demo repo??#2021-10-0812:17rickmoynihanI’m also curious how it relates to http://nextjournal.com#2021-10-0813:52mkvlrhey, there’s a user.clj here https://github.com/nextjournal/clerk-demo/tree/main/dev#2021-10-0813:53rickmoynihanah cool — I missed it 🙂#2021-10-0814:02mkvlrall notebooks referenced there should run#2021-10-0814:02mkvlrworking on fixing up the rest now#2021-10-0814:13mkvlrhttps://github.com/nextjournal/clerk-demo/commit/c5358a6a372df6f9e93f97e7274ce2d06f81b754#2021-10-0815:30yuhanLooks great! How does this compare to https://github.com/scicloj/notespace? I haven't used much of either but their goals look very similar.#2021-10-0819:22Jakub Holý (HolyJak)Yeah, I would like to know that too. I would appreciate it if https://nextjournal.com/mk/clerk-preview had a short section about the "syntax", i.e. what the comments rendered by Clerk look like, and a link to the API docs (with fns such as show! and the vl one). I am very happy to see this, thanks for open-sourcing!#2021-10-0819:32mkvlrClerk does static analysis to build a dependency graph for each form and caches results between subsequent evaluations so it only recomputes things that changed. This allows it to eliminate hidden state issues and a fast feedback loop with file save events as the interface. I believe notespace takes a different approach here receiving commands via the repl on what to evaluate but maybe @U066L8B18 can say more?#2021-10-0819:34mkvlrbesides there seems to be some differences regarding the format (markdown line comments in Clerk vs vectors of strings in Notespace) and the viewer api differs, compare https://github.com/scicloj/notespace/blob/master/test/notespace/v3_experiment1_test.clj with https://github.com/nextjournal/clerk-demo/blob/main/notebooks/viewer_api.clj#2021-10-0819:38mkvlr(btw the notebook format used by Clerk is from https://www.maria.cloud)#2021-10-0819:42Jakub Holý (HolyJak)Thank you!#2021-10-0819:43mkvlrand I’ll add the viewer functions to the readme#2021-10-0819:44mkvlr(there’s currently html, vl, plotly, tex, table, md, code, with-viewer and with-viewers. https://github.com/nextjournal/clerk-demo/blob/main/notebooks/viewer_api.clj is the best reference until then#2021-10-0811:53jerger_at_ddaJust released our new c4k-jira module. A k8s setup for small jira installations on a cheap single app cluster. We use this installation in production. Provider independent backup is included - there is no lock in 🙂 https://gitlab.com/domaindrivenarchitecture/c4k-jira #k8s #devops #jira#2021-10-0813:09borkdudebabashka 0.6.2 babashka https://github.com/babashka/babashka/blob/master/CHANGELOG.md#062 Various bugfixes and a few new features!#2021-10-0813:10ericdallocool, I was about to report something similar to #45#2021-10-0813:13Karol WójcikCool. I have already stumbled upon the cider hanging bug.#2021-10-0911:35Johan ThorénI've just released https://github.com/johanthoren/bibcal/releases/tag/1.0.0 - a Clojure (graal-vm native-image) command-line app to calculate the calendar based on the Bible and the 1st book of Enoch. It's inspired by HebCal, but based on https://github.com/johanthoren/luminary which bases calculations on the sun, moon, and stars - instead of a mathematical formula. https://github.com/johanthoren/bibcal#2021-10-0912:20borkdudeFun project :)#2021-10-0912:28Johan ThorénThanks. It's fun for me! Although I realize the audience will probably always be quite slim. At least I'm solving problems for myself... 🙂#2021-10-0913:14pezSo when are you going to find the Graal? 😃#2021-10-0913:20Johan ThorénNot sure about that, but there seems to be quite a few Clojurians loving the native-image possibilites!#2021-10-0913:22borkdude@U02DW53HCSE We sure do in #graalvm and #clj-easy#2021-10-0913:23borkdudeAnd of course in #babashka too#2021-10-0913:25borkdudeCome to think of it, I think your script could be written as a bb script as well :)#2021-10-0913:29Johan ThorénFor sure. But I consider my eventual target audience to be non-technical, and as such I want to ship a single exe file without any deps. In the future that might include a modest UI as well.#2021-10-0913:31borkdudemakes sense#2021-10-0913:31borkdudeany ideas about UI + graalvm already?#2021-10-0913:37Johan ThorénNo, I haven't even looked into it yet. It's somewhere on the 3.0 horizon (if at all possible).#2021-10-0913:38Johan Thorénhttps://www.bibcal.org will most likely be the place where I add pointy-clicky-features instead.#2021-10-0915:21littleliNice! @U02DW53HCSE I added it to clojure scoop bucket. It now shares the spot among other great tools members of clojure community produce. https://github.com/littleli/scoop-clojure/pull/164#2021-10-0916:41Johan ThorénKudos! I appreciate it! Didn't know about the dependency on extras/vcredist2015, what is that all about?#2021-10-0916:48littlelisorry, but I'm not an expert on C++ runtime dependencies. It's a library that all the native image build binaries on windows depend on at runtime. https://www.microsoft.com/en-us/download/details.aspx?id=48145#2021-10-0916:49borkdudethis is just a c++ library that graalvm depends on#2021-10-0916:49borkdudemost OSes have this available but Windows hasn't always got this#2021-10-0916:49borkdudebut it's a very common dependency that many Windows programs need#2021-10-0917:00Johan ThorénOk. Good stuff! I know pretty much nothing about Windows, so I'm happy someone does! I've added a note about Scoop Clojure to the installation notes in the README. Do I need to do anything to keep it up-to-date?#2021-10-0917:50littleliJust do as nice release artifact on github as it is now. Scoop is able to detect new releases on github and autoupdates manifest automatically.#2021-10-0918:04Johan Thorén@UBLU3FQRZ That's nice. The release is done through a GH workflow so that will stay essentially the same for the foreseeable future.#2021-10-0918:05littleli:thumbsup:#2021-10-1017:59lreadrewrite-clj v1.0.699-alpha - Rewrite Clojure code and edn https://github.com/clj-commons/rewrite-clj/blob/main/CHANGELOG.adoc#v10699-alpha • rewrite-clj v1 minimum Clojure version is now v1.8.0 (was formerly v1.9.0) • @borkdude is now a co-maintainer of rewrite-clj! Woot! Woot! It has been a while since I posted a rewrite-clj release to this channel, see the change log for details of other rewrite-clj v1 changes. Drop by in #rewrite-clj to chat.#2021-10-1104:15Alex Miller (Clojure team)tools.build v0.6.1 515b334 is now available: • compile-clj - TBUILD-20 - fix regression with including class dir on classpath • copy-dir - add option to copy but not replace binary files by extension#2021-10-1105:57plexusorg.flatland/ordered 1.15.10 is out, with thanks to clj-commons. Ordered offers map and set variants that maintain insertion order. This release adds a ClojureScript implementation of the map type. (follow-up in #clj-commons).#2021-10-1110:15ingesolhttps://github.com/ingesolvoll/glimt, an FSM interface for https://github.com/day8/re-frame-http-fx, has had its first release. It’s implemented using https://github.com/lucywang000/clj-statecharts.#2021-10-1116:11hlshipcom.walmartlabs/lacinia 1.0 and lacinia-pedestal 1.0 Lacinia is an open-source implementation of the GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ It's been our goal since the initial release of Lacinia in 2017 to produce a GraphQL library that was stable, performant, easy to use, and true to the specification. We at Walmart, along with a number of outside contributors, have spent the last ten months adding new features, overcoming limitations, and improving performance, while deploying these libraries to servers handling millions of requests per day. Featured changes in 1.0: - detection of infinite cycles due to fragments calling themselves - merging subtrees caused by fragment selections - schema navigation: expose the compiled schema's contents via the select-type API lacinia-pedestal adds support for accessing Lacinia GraphQL as an HTTP endpoint GitHub repo: https://github.com/walmartlabs/lacinia-pedestal Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/ 1.0 contains a small bug fix#2021-10-1202:13mauricio.szaboSo, years ago I made a project as a joke. But then, a friend started to work with Ruby and was missing Clojure libs. So I decided to see how far the two languages can co-exist: presenting Clojuby: https://gitlab.com/mauricioszabo/clojuby It's quite alpha, quite new, and probably will change the API, but it kinda works (even with Rails)! Your app needs to run on JRuby, but other than that almost everything you can do in Ruby is supported!#2021-10-1202:14mauricio.szaboI also made a test playground for Rails here, querying things from ActiveRecord and rendering with hiccup (oh my!): https://gitlab.com/mauricioszabo/clojuby-on-clails-example#2021-10-1207:29Carsten BehringWhen it becomes more stable, maybe we can add it here: https://github.com/behrica/clj-py-r-template PRs welcome#2021-10-1207:42plexusFun fact, http://lambdaisland.com has been using JRuby since 2016 to run the Kramdown markdown parser#2021-10-1221:22mauricio.szabo@U7CAHM72M sure! To be honest, I'm not sure where to go with this library (I mean, originally it was supposed to be a joke, so it's already way past what I originally intended 😄). I talked with some people that miss some Clojure killer libs like Malli, Pathom, Clara-Rules, Datalog dbs, etc and it seems that a good fit would be to slowly replace a Rails app running at JRuby with fragments in Clojure (you can hook into some controllers and add make it respond to a Clojure code instead, Ruby being as dynamic as it is) so that's one of the possibilities. It's still quite lacking on interop (you have to use rb/send or rb/eval to evaluate things) and some patterns still don't work well (for example, Rails' params don't map to Clojure maps) but it's a start!#2021-10-1212:05Jakub Holý (HolyJak)defdecoratorhttps://gist.github.com/holyjak/81c6e439192da00c8106cc3ce960b8f0#file-defdecorator-clj-L63 (wrappers) for Java interfaces. Example output (elided):
(binding [*print-meta* true] (prn (macroexpand-1 '(defdecorator WrappedConnection java.sql.Connection))))
; =>
  (deftype WrappedConnection [^java.sql.Connection target]
    java.sql.Connection
    (abort [_ arg0] (. target abort arg0))
    (beginRequest [_] (. target beginRequest))
    ...
    ;; the following are type hinted due to overloaded arities:
    (^java.sql.PreparedStatement prepareStatement [_ ^java.lang.String arg0 ^int arg1] (. target prepareStatement arg0 arg1))
    (^java.sql.PreparedStatement prepareStatement [_ ^java.lang.String arg0 ^ints arg1] (. target prepareStatement arg0 arg1))
    (^java.sql.PreparedStatement prepareStatement [_ ^java.lang.String arg0 ^\"[Ljava.lang.String;\" arg1] (. target prepareStatement arg0 arg1))
    ...
    java.sql.Wrapper
    (isWrapperFor [_ arg0] (. target isWrapperFor arg0))
    (unwrap [_ arg0] (. target unwrap arg0)))
#2021-10-1220:55tengstrandI’ve just released https://github.com/polyfy/polylith/releases/tag/v0.2.13-alpha of the poly tool. The highlights are: • A new user friendly shell command with support for history and auto-complete. • The poly tool documentation is improved and has moved to https://polylith.gitbook.io/poly. • We have switched to tools.build, thanks to @seancorfield’s excellent PR.#2021-10-1304:24Asko NōmmAnnouncing the first release of https://github.com/askonomm/shh (compiled to native binaries with Graal VM) • Stores everything in a .shh.edn file in the user home directory. • Copies passwords to clipboard for quick usage. The whole point of it really is as-fast-password-getting-as-possible for those who always have a CLI open, like me. • Whenever creating a password, it will prompt for what is the desired length of the password, so you can use it with restrictive systems.#2021-10-1519:25littleliif you build a native windows binary let me know, I'll add to scoop-clojure.#2021-10-1601:07Asko NōmmI would love to build a windows binary, but I don’t have the ability to test with Windows, which is why I haven’t done it. Windows does some things differently (like file paths) that might break for example, and I have no way of knowing.#2021-10-1415:51Eddú Meléndezone year ago, https://github.com/paketo-buildpacks/leiningen was released. Today, I am happy to announce that https://github.com/paketo-buildpacks/clojure-tools has been released. So, if there is a deps.edn file at the root directory then just running pack build tododemo --builder will produce a image. By default, it is using java 11. want java 17? then pack build tododemo --builder "" -e 'BP_JVM_VERSION=17.*' or you may want to try another vendor? then pack build tododemo --builder "" --buildpack --buildpack In order to run the image, perform docker run --rm --tty --publish 8080:8080 -e JAVA_TOOL_OPTIONS="-XX:MaxMetaspaceSize=100M" tododemo For some reason, in java 11 we need to increase the metaspace but doesn’t happen with java 8 and 17 and alibaba dragonwell. There is already an https://github.com/paketo-buildpacks/libjvm/issues/88 for that. Paketo Buildpacks have some default values but you can override them. Check the samples https://github.com/paketo-buildpacks/samples/tree/main/java/deps and https://github.com/paketo-buildpacks/samples/tree/main/java/tools-build#2021-10-1518:57fogus (Clojure Team)New Cognitect Labs aws-api service APIs available! CHANGES - new endpoints version 1.1.12.88 - new AWS service API available (services version v814.2.1008.0): account, cloudcontrol, grafana, voice-id, wisdom README: https://github.com/cognitect-labs/aws-api/ API Docs: https://cognitect-labs.github.io/aws-api/ Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn#2021-10-1617:00Joshua SuskaloAnnouncing https://github.com/IGJoshua/coffi, a foreign function interface for Clojure on JDK 17. The library includes features like: • wrapper functions that make native code feel like Clojure code • automatic serialization and deserialization to marshal data between the native world and Clojure • support for callbacks and function pointers • support for low-level wrappers to manage native allocations and avoid marshaling costs • the best performance on primitive types of all FFI libraries currently available in Clojure (struct benchmarks have not been compared to other options yet) • a data model to support importing a library's whole interface as data (with some limitations) https://github.com/IGJoshua/coffi As a test for the library, I've wrapped https://github.com/IGJoshua/glfw-clj and validated it works as intended. If you start wrapping something and find any errors, please open an issue, or come say hi in #coffi!#2021-10-1619:35viestiThis is really neat, thank you 🙂
#2021-10-1620:20borkdudeLooks really impressive, congrats !#2021-10-1620:20Joshua SuskaloThanks!#2021-10-1807:10roklenarcicdid JDK 17 get a new FFI? I know only about JNI, which requires some generated java files and other stuff.#2021-10-1813:31Joshua SuskaloYes, JDK 17 has an incubator release of Project Panama. https://openjdk.java.net/projects/panama/#2021-10-1813:32Joshua SuskaloIt's an FFI which requires no native code to be written and can just link against dynamic libraries at runtime. It's pretty cool, but since it's an incubator the API may still change before it's added to java.base. @U66G3SGP5#2021-10-1813:41roklenarcicvery interesting#2021-10-1819:07viestiwent and tried out using OSX system api (CoreWLAN via objc) with coffi, worked nicely :) https://github.com/viesti/osx-coffi#2021-10-1819:13borkdudeThat looks awesome. I'm also happy to see that exported clj-kondo configs are being put to good use.#2021-10-1913:46Joshua SuskaloHey @U06QSF3BK I looked at your repo on a call with some of my friends trying to get it working last night, but we kept running into issues. We're not sure, but it might be that the macbook we tried it on was using MacOS 12. Are you actually on OS 10? I'm also curious, with dlopen, was there a reason you couldn't use coffi.ffi/load-library? It allows you to specify an absolute file path.#2021-10-1913:46Joshua SuskaloIn any case, it's really cool that it worked for you!#2021-10-1914:12viestiI'm on 11.6, I think the library reference stuff got changed in Big Sur#2021-10-1914:14viestiI didn't try JNA on my machine yet, but there is something funny in how System.loadLibrary works in Big Sur, and found from some Python ctypes Stack Overflow post the form where the library name passed to dlopen is <path>/Versions/Current/<libname>#2021-10-1914:14viestiso yeah, probably different for older OSX versions#2021-10-1914:14Joshua SuskaloAh, okay. Thanks!#2021-10-1806:04AbhinavAnnouncing my first clojure project https://github.com/AbhinavOmprakash/luna. luna is a DSL that translates to regex. luna is still in beta, but supports a decent portion of regex. I'm open to contributions and suggestions. https://clojars.org/org.clojars.abhinav/luna https://github.com/AbhinavOmprakash/luna#2021-10-1807:22borkdudeSimilar goal to https://github.com/lambdaisland/regal?#2021-10-1808:31AbhinavI guess. I discovered regal when I was almost done with the project. But the syntax of regal is quite different from luna.#2021-10-1809:21Asko NōmmAwesome work!#2021-10-1813:53Noah Bogartlove to see different approaches to “readability of regex”. it’s a complex topic and it’s fun to see how folks tackle it#2021-10-1815:11Jakub Holý (HolyJak)#find-my-lib is useful to search for prior art :)#2021-10-1815:18Abhinav@UEENNMX0T I'd love to hear your feedback on my approach 🙂#2021-10-1815:19Abhinav@U0522TWDA I didn't know about this, thanks!#2021-10-1909:00Toby ClemsonAnnouncing https://github.com/logicblocks/salutem, a system for defining and maintaining a collection of health checks, with support for: • both realtime and background checks • a registry for storing, finding and resolving checks • an asynchronous maintenance system for ensuring that the results of checks are kept up-to-date according to their definition See the https://logicblocks.github.io/salutem/getting-started.html, https://logicblocks.github.io/salutem/index.html and https://go-atomic.io/2021/09/30/health-checks.html for more details.#2021-10-1917:55borkdudeclj-kondo 2021.10.19 clj-kondo https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20211019 New • New optional linter: warn on missing `gen-class` if namespace has `-main` fn https://github.com/clj-kondo/clj-kondo/issues/1417. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#main-without-gen-class. • Detect arity mismatches for functions defined with `def` https://github.com/clj-kondo/clj-kondo/issues/1408 • Type inference improvements for `def` + `fn` combination https://github.com/clj-kondo/clj-kondo/issues/1410 • Local `fn` type inference https://github.com/clj-kondo/clj-kondo/issues/1412 • Analysis: allow user to request all or specific metadata be returned https://github.com/clj-kondo/clj-kondo/issues/1280 (https://github.com/lread) • rseq called on other type than vector or sorted-map now gives type error https://github.com/clj-kondo/clj-kondo/issues/1432 Enhanced / fixed • Fix false positive with ns-unmap https://github.com/clj-kondo/clj-kondo/issues/1393 • Support custom-lint-fn with `.cljc` https://github.com/clj-kondo/clj-kondo/issues/1403 • Allow reader conditional in metadata https://github.com/clj-kondo/clj-kondo/issues/1414 • Analysis: add `:from-var` in higher order call https://github.com/clj-kondo/clj-kondo/issues/1404 • Dedupe linted files https://github.com/clj-kondo/clj-kondo/issues/1395 (https://github.com/ericdallo) • Add `:duplicate-ns` to duplicate-require linter output https://github.com/clj-kondo/clj-kondo/issues/1421 (https://github.com/ericdallo) • if-let / `if-some` with invalid arity no longer warn https://github.com/clj-kondo/clj-kondo/issues/1426 • Analysis: spport for defn 2nd attr-map, :doc derivation fixes (https://github.com/lread) • Fix parsing of trailing metdata map https://github.com/clj-kondo/clj-kondo/issues/1433 (https://github.com/lread) Thanks @lee and @ericdallo for the help.#2021-10-1918:12vnczWill Calva automatically download the latest version on the next start? @U0ETXRFEW#2021-10-1918:12borkdude@U015VUATAVC it will once @ericdallo publishes a new version of #lsp#2021-10-1918:12ericdallonope, needs new clojure-lsp release which should come soon this week#2021-10-1918:13ericdalloI'm just focusing on fix a bug then I should release soon#2021-10-1918:13borkdudethere is also a standalone clj-kondo plugin available for VSCode if you want a preview ;)#2021-10-1921:50jumarThanks again for a very quick turnaround on rseq !#2021-10-1922:10wilkerlucioHello everyone! Today I'm pleased to announce a new release of Pathom 3! This release contains some fixes for dynamic resolvers, and the brand new parallel processor. This processor is faster and less resource intensive than the ones in Pathom 2, and you can expect a good bump in performance when compared to it (real benchmarks will be taken and share in a blog post soon)! Check new docs for the parallel runner at https://pathom3.wsscode.com/docs/async/#parallel-process Release: https://clojars.org/com.wsscode/pathom3 Changes in this release: • Fix foreign mutation on async runner • Remove viz request snapshots to allow multiple connectors on the same meshed graph • Fix the flow of params on foreign-ast • Fix nested dependency process • Infer output shape in constantly resolver • Parallel processor 🎉#2021-10-2010:08pezDear everybody: A new version of Calva just out, v2.0.220. It adds a proper Paredit Kill Right command, bound to ctrl+k. Thanks @amar! gratitude There is also a Paredit Select Right that will push “kill right” ranges on the selection stack. See https://calva.io/paredit/ for demos of both. > Hacktoberfest > albeit not proper nor done > for CIDER distilled [2.0.220] - 2021-10-20 • https://github.com/BetterThanTomorrow/calva/issues/1024 [2.0.219] - 2021-10-19 • https://github.com/BetterThanTomorrow/calva/issues/1348 [2.0.218] - 2021-10-18 • https://github.com/BetterThanTomorrow/calva/issues/1346https://github.com/BetterThanTomorrow/calva/issues/1345 [2.0.217] - 2021-10-17 • https://github.com/BetterThanTomorrow/calva/issues/1340https://github.com/BetterThanTomorrow/calva/issues/1333https://github.com/BetterThanTomorrow/calva/issues/1231 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1332 [2.0.216] - 2021-10-10 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1329 • Fix: https://github.com/BetterThanTomorrow/calva/issues/872 [2.0.215] - 2021-10-10 • https://github.com/BetterThanTomorrow/calva/issues/1324 [2.0.214] - 2021-10-06 • https://github.com/BetterThanTomorrow/calva/issues/1001https://github.com/BetterThanTomorrow/calva/issues/1311 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1310https://github.com/BetterThanTomorrow/calva/issues/1319 [2.0.213] - 2021-10-02 • Workaround https://github.com/BetterThanTomorrow/calva/issues/1308 #2021-10-2012:23pezAnyone who appreciates my gratitude gratitude is super welcome to retweet this one: https://twitter.com/pappapez/status/1450768813188861959#2021-10-2012:45Dainius Jocashttps://github.com/dainiusjocas/clj-jq 1.1.3 released https://github.com/dainiusjocas/clj-jq/releases/tag/v1.1.3#2021-10-2012:56borkdudeIt's already a month ago since I last announced changes in #nbb, a babashka-like tool for CLJS scripting on Node.js. New additions in v0.0.76-v0.0.107: • console REPL. If you have Node.js simply type npx nbb and you will be dropped into a REPL. • Socket server REPL • nREPL server for development with Calva • Add clojure.test so you can now use nbb to develop e.g. browser tests using puppeteer or playwright • Support for reader conditionals using :org.babashka/nbb • Print nicer stacktrace when error happens (similar to bb) • Misc. fixes and enhancements. https://github.com/borkdude/nbb Join #nbb for more information.#2021-10-2013:40ericdalloclojure-lsp Hello clojurians! New https://clojure-lsp.io/ release with fixes, performance improvements and new features! Probably one of the major changes is the replace of sqlite with #datalevin as the analysis cache db implementation, improving clojure-lsp startup, thank you @huahaiy for the huge help on this! 🚀 Also, we have https://clojuredocs.org/ integration 🎉 showing docs, examples, notes and see-alsos of symbols directly on your editor when hovering a symbol! For more information, check #lsp Have a great code ;)#2021-10-2014:24rafaeldelboniAwesome news! Out of curiosity, do you have the startup time difference of the between versions?#2021-10-2014:26ericdalloonly on specific moments: 10% finding cache and 95%#2021-10-2014:26ericdallothat's when we read and save db cache#2021-10-2015:55respatializedIf the code is cached in a datalog DB, how far removed is clojure-lsp from something like codeq? :thinking_face: https://github.com/Datomic/codeq#2021-10-2016:00ericdallonot sure @UFTRLDZEW :thinking_face:#2021-10-2018:41Karol Wójcik@UKFSJSM38 how can I enable docs?#2021-10-2018:48ericdallo@UJ1339K2B are you using doom-emacs? what editor are you using?#2021-10-2018:49ericdalloif emacs: (setq lsp-ui-doc-enable t) , if using doom-emacs just type K#2021-10-2018:49Karol Wójcikdoom-emacs 😄#2021-10-2018:50rafaeldelboniHey the startup time changed from 10 seconds to 3 in a big project here, cool!#2021-10-2018:52Karol WójcikHere are configuration for lsp. K shows the following buffer
(setq lsp-ui-sideline-enable t
      lsp-ui-doc-enable t
      lsp-enable-symbol-highlighting nil
      +lsp-prompt-to-install-server 'quiet
      gc-cons-threshold (* 100 1024 1024)
      read-process-output-max (* 1024 1024)
      treemacs-space-between-root-nodes nil
      lsp-headerline-breadcrumb-enable nil
      company-idle-delay 0.5
      lsp-idle-delay 0.5
      company-minimum-prefix-length 1
      lsp-lens-enable nil
      lsp-enable-file-watchers nil
      lsp-file-watch-threshold nil
      lsp-signature-auto-activate t
      lsp-enable-indentation nil
      lsp-enable-on-type-formatting nil)
#2021-10-2018:53ericdalloAmazing @UMMMKKADU :D#2021-10-2018:54ericdalloOh @UJ1339K2B I'm actually releasing a fix for the clojuredocs, I made a bug on the native image 😅 forgot to add to enable the https protocol#2021-10-2018:59Karol WójcikBtw clojure-lsp wrongfully is quesing the project root. I'm in /Workspace/Personal/Clojure/holy-lambda, but the clojure-lsp guessed the project root to be /Workspace/Personal/Clojure.. Hmm#2021-10-2018:59Karol Wójcik
lsp-restart-workspace: There are no active servers in the current buffer
LSP :: Guessed project root is ~/Workspace/Personal/Clojure
LSP :: Connected to [clojure-lsp:646152].
#2021-10-2019:03Karol WójcikDunno why, but every project I visit lsp incorrectly guesses the project root.#2021-10-2019:22Karol WójcikFixed the last error by using lsp-workspace-folders-add 😄#2021-10-2019:26ericdalloSorry for the delay, but yeah, you need to lsp-workspace-folders-remove and then lsp and choose the correct dir#2021-10-2019:42Karol WójcikDon’t sorry :D i can wait ;)#2021-10-2113:20ericdalloclojruedocs fix released !#2021-11-0113:16Otto Nascarelladalhe eric!!!#2021-10-2018:15Felipe ReigosaHey guys, there's a new video for my game MockMechanics written entirely in clojure. In the video I show how I created that 4 color memory game (Simon) without writing any code. https://www.youtube.com/watch?v=tM8ljtPA0ZM&amp;ab_channel=MockMechanics What do you think? Here's a preview:#2021-10-2023:13fingertoeI hope to really enjoy a conference talk about this someday. Cool work!#2021-10-2106:32pezAgree about how cool this is! It twists my mind a bit inside-out trying to unpack what is really going on. That said, I also note that this is a closed source project, and I think the updates about it fits better in #news-and-articles. Of course, if the source is opened, that would be even more awesome. 😃#2021-10-2110:30Felipe ReigosaThanks guys. @U0ETXRFEW the plan was always to make it open source eventually, I just wanted to organize a few things before I made it open source and invited people. I'm very, very close so in the next couple of weeks I'll create the github project. It's a very fun project to work on and there's still plenty to be done, in fact more than one person can do at this point, so I'll be very glad to get your help if you want to.#2021-10-2111:13pezThat sounds absolutely fabulous! I know all about “more than one person can do”, and am fortunate to have a team mate, and then lots of team mates in the “extended” team. I’m looking forward to make a video about MockMechanics development workflow using #calva We don’t have a huge following of the CalvaTV channel, but it is probably a very good audience for a super cool project looking for contributors.#2021-10-2111:24Felipe ReigosaThat sounds great 😁👍#2021-10-2022:50Asko Nōmmhttps://github.com/askonomm/shh version 2021.10.20 is out: • Now prompts for password complexity whenever creating a password, further enabling usage with restrictive systems • Has Windows support thanks to @abhinav.omprakash10 • A bunch of other quality of life improvements, such as when using Shh from a headless environment on Linux it will display the password instead of copying to clipboard, because xclip requires a display.#2021-10-2105:40tatuta simple XTDB inspector https://github.com/tatut/xtdb-inspector web UI... you can browse documents, view the history or run (and save) queries. Also shows XTDB indexing metrics.#2021-10-2108:46tatutideas welcome, what could the inspector do more#2021-10-2108:44henrikhttps://github.com/fluent-development/heroicons-clojure is a Fulcro/Reagent/Re-frame compatible packaging of the icons from https://heroicons.dev/.#2021-10-2108:45tatutthere's also https://github.com/tatut/re-svg-icons#2021-10-2119:58phronmophobichttps://github.com/phronmophobic/clj-media. A wrapper around https://github.com/cnuernber/avclj. Currently, only basic support for video and gifs, but more to come! Here's an example from https://github.com/phronmophobic/clj-media/tree/main/examples/codetogif#2021-10-2120:06borkdudeThis gives a whole new meaning to defrecord#2021-10-2120:08lreadMagical! One thing that I thought might be interesting is to somehow automatically capture terminal screenshots (stills not animated gifs) for the output of a single command. I thought this might be useful for tools that have pretty output and want to keep their screenshots in their docs up to date. Tools like maybe https://github.com/greglook/puget, https://github.com/lambdaisland/deep-diff2 or even https://github.com/lread/status-line. Would your library help with this kind of thing?#2021-10-2120:12phronmophobicThat's an interesting idea. You still need to draw the frames, but I think I have an ansi terminal renderer lying around somewhere. Let me check!#2021-10-2121:52phronmophobic@UE21H2HHD Just checked. The terminal renderer I have isn't in an easy to use state at the moment. For static screenshots, clj-media seems like overkill. It seems like you could use any terminal renderer. For example: • applescript + terminal + screencapture • xterm.js + puppeteer + https://pptr.dev/index.html#?product=Puppeteer&amp;version=v10.4.0&amp;show=api-class-page#2021-10-2121:58borkdudeyou know about https://asciinema.org/ as well right?#2021-10-2123:01phronmophobicI did not. They even have a cljc virtual terminal. I might have to play around with this at some point, https://github.com/asciinema/vt#2021-10-2200:52lreadThanks for taking a peek @U7RJTCH6J - and also for the ideas!#2021-10-2208:22rickmoynihan@U7RJTCH6J looks like a nice little project… FYI though it looks like you may need to license it as GPLv2 rather than EPL as avclj is GPLv2 not LGPL. I’m not sure why it isn’t LGPL but it seems FFMpeg has parts of the library that are GPL licensed and other parts that are LGPL. It may be that avclj could be licensed as either depending on what functionality others use 🤷#2021-10-2209:12Anmol Ahuja"Hi Clojurians, I represent Skuad, an employment platform that helps companies build & manage their globally distributed remote teams. We're actively looking for {PHP Developers} for our client Shiprocket who've built India's first automated shipping solution for eCommerce. This is a fully remote opportunity. If you're interested, you may directly apply on this link - https://allremote.jobs/jobs/sleek-tech-full-stack-software-engineer-569e96aa-aad5-4915-b8a5-27b8988f5c02"#2021-10-2209:15pezYou shouldn’t be advertising for PHP Developers on this slack. Deleting this and deactivating your account since you spammed us with four of these!#2021-10-2209:19pezOMG! They posted more while I was deleting. Maybe it was a bot? But now deactivated. Let’s hope they don’t keep creating accounts.#2021-10-2209:21Geoffrey GaillardLooked like someone copying/pasting pre-made messages.#2021-10-2210:07pezVery clumsily too. What on earth could have been the purpose? All I can think of is that they bet on that the links will be published outside this slack automatically. Which I think actually can happen so I raised a concern in #clojureverse-ops#2021-10-2211:50dmegasAt least Zulip seems to not have picked them up 👌#2021-10-2211:51dmegasOr maybe the deletions cascade to Zulip#2021-10-2211:53pezAh, yes. That’s probably how the Clojurians log works as well. I think I’ve seen something about how the logging is quite non-trivial.#2021-10-2216:57seancorfieldIf a message is deleted within a certain window of it having been posted, the Zulip mirror bot will catch the delete as well as the original post. I think it's as long as the mirror bot has the original message in memory...#2021-10-2511:33Abhinavhttps://github.com/AbhinavOmprakash/sisyphus is a simple task schedule that can run clojure functions periodically. Features • It runs all the tasks in the background so you can keep working in the repl, after starting sisyphus. • Dynamically add and remove tasks while sisyphus is running. • Exceptions thrown by tasks are logged. • Print logs to console or write to EDN files. If you have ideas and suggestions for improvements do let me know. Clojars https://clojars.org/org.clojars.abhinav/sisyphus#2021-10-2512:00Jivago Alves@U02CVMEFEUF Thanks for sharing it! I was wondering how your library compares to https://github.com/overtone/at-at/blob/master/src/overtone/at_at.clj#L2 or https://github.com/jarohen/chime/blob/master/src/chime/core.clj#L8 especially because they use a https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html. Are you using for different use cases?#2021-10-2512:24Abhinavtbh I haven't seen those libraries, but chime looks interesting. I think I might use a https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html in the next release. But for now, the number of threads spawned is not limited (?) which has the upside of ensuring your task runs at the time it was scheduled (if resources permit). Also, sisyphus has an arguably friendlier interface. (three important functions). It may not give you the fine-grained control of chime, tho. But chime seems like a very mature library :)#2021-10-2517:58pezAwesome name!#2021-10-2518:36oliyLove the name too#2021-10-2520:06Jakub Holý (HolyJak)#find-my-lib is a good place to check 🙂#2021-10-2513:14Carsten Behringhttps://github.com/behrica/opencpu-clj is simple package to access an https://www.opencpu.org/ server Features: • supporting all OpenCPU operations in an idiomatic way Clojars https://clojars.org/opencpu-clj#2021-10-2518:20phronmophobicBased on a suggestion from @lee and a tip from @borkdude, I wrote a scriptable, embeddable, terminal emulator , https://github.com/phronmophobic/membrane.term#2021-10-2518:27lreadWowzers! Looking forward to checking this out!#2021-10-2518:30phronmophobicLet me know if you run into any issues. The https://github.com/phronmophobic/membrane.term#run-a-headless-terminal-and-take-a-screenshot section should cover the use case you mentioned#2021-10-2518:30lreadSweet!#2021-10-2518:53Ben SlessIncredible. It's almost no code at all. Powerful tool you made there 🙂#2021-10-2518:57phronmophobichttps://github.com/asciinema/vt does a lot of work, but it's not much code either! Since it's all just data, it was really easy to work with. I can't imagine it would be that much fun integrating with a virtual terminal emulator in another language.#2021-10-2702:46genekimSo cool, @U7RJTCH6J !!#2021-10-2607:02bozhidarclj-refactor.el and refactor-nrepl 3.0 are out! You can read more about the new releases here https://metaredux.com/posts/2021/10/26/clj-refactor-3-0.html#2021-10-2607:44vemvAs the post says, there’s no shortage of ideas for what we can improve :) Expect various fixes and performance improvements short- and medium-term. The main bottleneck remains being tools.analyzer (as it does for e.g. Eastwood) but recently I've been hammocking a safe way to parallelize it. I've done similar parallelization work in a tools.namespace fork so I'd be pretty confident that it will work.#2021-10-2608:25Ben Sless@U45T93RA6 do you have some profiling data for tools.analyzer?#2021-10-2608:27vemvI profile it from time to time with different tools depending on the task at hand Anything specific you're chasing?#2021-10-2608:27Ben SlessIf you have flame graph for a big chunk of analysis (like an entire file) it would be nice#2021-10-2609:04vemvHere's the minimally viable snippet for reproducing what refactor-nrepl ultimately does with tools.analyzer (intentionally skipping its caching layer):
(let [your-ns 'clojure.string]
  (time
    (do
      (#'refactor-nrepl.analyzer/build-ast your-ns (ns-aliases your-ns))
      nil)))
#2021-10-2609:55Ben Slessbuild-ast just calls tools.analyzer or is there anything happening in between?#2021-10-2610:13vemvnothing of interest, it offloads to t.ana pretty directly https://github.com/clojure-emacs/refactor-nrepl/blob/a3f9de809b1246101786ec6160df3b8c66585f74/src/refactor_nrepl/analyzer.clj#L74-L93#2021-10-2611:14Ben SlessCool, I'll try to poke at it later today#2021-10-2612:43ericdalloAwesome project, congrats fro the awesome work!#2021-10-2613:15imreLove the clean-ns fix#2021-10-2916:03Ben Sless@U45T93RA6 I have a flame graph and some initial insights if you're curious#2021-10-2612:48lucasHi everyone! We've published a new library to work with the DocuSign eSignature API. The library also provides an Integrant key so it can be used with Duct or Integrant. https://github.com/magnetcoop/esignatures.docusign#2021-10-2623:30steveb8nThank you. I need exactly this for my product in the next couple of months!#2021-10-2616:51katoxHi, updated release of PGMig 0.7.1 is out: https://github.com/leafclick/pgmig/releases/tag/v0.7.1 ## [0.7.1] - 2021-10-26 - Added windows cmd script to create the x64 native binary (exe) - Updated to GraalVM 21.2 - Fix DNS resolution issues in pre-built docker image#2021-10-2621:29Alex Miller (Clojure team)The https://clojure.org/releases/tools#v1.10.3.998 is now available • Remove bottle :unneeded from brew formulas (no longer needed) • https://clojure.atlassian.net/browse/TDEPS-209 Include only jar files in classpath from Maven artifacts • Update to tools.tools v0.2.1 (minor improvements in clj -Ttools list) • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1058#2021-10-2707:53Eugenis there a way to get help for a tool other than knowing in advance what it does? I found out about clj -Ttools list in your announcement. Is there a way to see what other things are available besides list ? Is there a way to print docs for those ? Most CLI tools offer a --help or a man page. I tried some of the things I know
clj -Ttools 
No function found on command line or in :exec-fn
clj -Ttools help
Function not found: clojure.tools.tools.api/help
clj -Ttools --help
Function not found: clojure.tools.tools.api/--help
This works but for clj, not for the tools.
clj --help 
IMO I think it's important for this part to play like the rest of the tooling ecosystem so the experience is nice.
#2021-10-2712:23Alex Miller (Clojure team)there is some more work to do on the help side of tools for sure#2021-10-2712:24Eugenwhre is the best place to raise an issue to track this ?#2021-10-2712:26Alex Miller (Clojure team)https://ask.clojure.org is always the best place to raise questions/issues#2021-10-2712:26Alex Miller (Clojure team)we do actually have an existing ticket that's near this but it would be helpful to just ask this too#2021-10-2712:27Eugenok, I'll ask this and if I find the ticket include that too#2021-10-2712:28Alex Miller (Clojure team)https://clojure.atlassian.net/browse/TDEPS-201 is the one I was thinking of but it's really a different issue so no need to link#2021-10-2716:45seancorfield@U011NGC5FFY You can get help for -Ttools like this:
(! 649)-> clojure -A:deps -Ttools help/doc
This api provides functions that can be executed from the Clojure tools using -Ttools.

-------------------------
clojure.tools.tools.api/install
([{:keys [as], :as args}])
  Install a tool under a local tool name for later use. On install, the tool is procured, and
  persisted with the tool name for later use.
...
(! 650)-> clojure -A:deps -Ttools help/dir
install
list
remove
show
(! 651)-> clojure -A:deps -Ttools help/doc :fn show
-------------------------
clojure.tools.tools.api/show
([{:keys [tool], :as args}])
  Print info and usage for this :tool.

  Options:
    :tool (required) - tool name to show

  Example:
    clj -Ttools show deps-graph
#2021-10-2716:46seancorfieldI have deps-new installed as tools and so I can get help for that:
(! 653)-> clojure -A:deps -Tnew help/doc
The next generation of clj-new. Uses tools.build and
  tools.deps.alpha heavily to provide a simpler 'shim'
  around template processing.

-------------------------
org.corfield.new/app
([opts])
  Exec function to create an application project.
#2021-10-2805:20EugenThansk @U04V70XH6. Hard to remember that. and very hard for new folk who come to clojure and need to use the tools to "gues". I'm more of the my-program --help (or similar) persuasion 🙂#2021-10-2805:56seancorfieldYeah, I sympathize. I've been immersed in the CLI stuff for long enough that some of the "weird" command-line conventions have become second nature but I know they're not "normal".#2022-02-1807:53EugenI've asked on clojure https://ask.clojure.org/index.php/11590/support-help-for-tools-use-standard-options-clojure-tooling#2021-10-2713:19vlaaadreveal Reveal Pro 1.3.265 is out — https://vlaaad.github.io/reveal-pro Reveal is a Read Eval Visualize Loop for Clojure, a powerful REPL output pane running in the JVM. This release adds SQL DB explorer that allows you to get a good overview of your database schema and seamlessly browse relational data across multiple tables, all while being available in your REPL!#2021-10-2713:45Ivannice! 💯#2021-10-2713:51vlaaadThanks!#2021-10-2715:07wotbrewWow! this looks amazing ❤️#2021-10-2715:53timoparty-corgi is this kind of visual browsing of databases possible for datalog-dbs like datahike, datomic, xtdb etc? (only tried reveal briefly once)#2021-10-2716:01vlaaadI consider implementing something similar for datomic-like dbs...#2021-10-2717:23metasoarousSeems like it would be easier if anything; The view:table-view could just be a pull, and I'm sure is more annoying to do with a sql queries.#2021-10-2717:24metasoarousIncidentally, may I suggest a different name than table-view? To me, that's a document-view or map-view. Could even explicitly be pull-view.#2021-10-2717:25metasoaroustable-view makes me think of a literal table, like in the db:explore-table view.#2021-10-2717:26metasoarousJust a suggestion... Regardless, fantastic work! This is very cool stuff 🙂#2021-10-2720:01vlaaad@U05100J3V not sure I'm following you 😞#2021-10-2720:01vlaaadwhat do you mean be table-view and view:table-view ?#2021-10-2802:38jacob.maineFor those interested in visualizing Datomic schemas, may I recommend https://github.com/mainej/schema-voyager? It might be possible to make it work for other datalog-style databases, though I've never tried.#2021-10-2804:30Lucy WangHi there, clj-statecharts, the state machine and statecharts library for clojure/clojurescript, has released 0.1.1 . https://github.com/lucywang000/clj-statecharts This release updated the version of malli to 0.6.2 to fix https://github.com/metosin/malli/issues/536 . Thanks @jacob.maine for pointing this out!#2021-10-2808:30Jakub Holý (HolyJak)nice! What are your thoughts about cutting a 1.0 release?#2021-10-2810:59Lucy Wang@U0522TWDA Well, there are still quite some features that I consider adding, e.g. history states, final states, so I need to think more about that 🙂#2021-10-2907:42ingesolI think “xstate for clojure” is a very important addition to the clojure development story, and implementation so far is very promising. Hoping to see a community around this.#2021-10-2809:36borkdudejet v0.1.0 jet Convert between JSON, EDN and Transit on the command line with a query language akin to jq or using regular Clojure. The new version now comes with camel snake kebab conversions for keys. https://github.com/borkdude/jet/releases/tag/v0.1.0#2021-10-2910:07borkdudebabashka v0.6.4 - a fast starting Clojure scripting environment babashka https://github.com/babashka/babashka/blob/master/CHANGELOG.md#063 • Add `java.security.Provider` and `java.security.Security`. This adds compatibility with https://github.com/clj-commons/digest. • Fix mapping for `babashka.fs/unzip` https://github.com/babashka/babashka/issues/1030 • Pods: support metadata in pod vars, like docstrings (https://github.com/quoll) • babashka.curl: support `:follow-redirects false` (https://github.com/sudorock) • Add support for `--init` as a file to be loaded before evaluation actions https://github.com/babashka/babashka/issues/1033 (https://github.com/bobisageek) • Bump rewrite-clj to v1.0.699-alpha (https://github.com/yannvanhalewyn) • Fix `BABASHKA_FEATURE_POSTGRESQL` feature flag, initialize `java.sql.SQLException` build time https://github.com/babashka/babashka/issues/1040 • Deps.clj: upgrade to tools version `1.10.3.998` and include new `DEPS_CLJ_TOOLS_VERSION` environment variable to use older or newer tools jar.#2021-10-2918:31lilactownA weird (but cool) announcement: lilactown/autonormal has been renamed to town.lilac/pyramid. • Why the rename? I didn't like the old one. • What does the new name mean? I just like it. I probably won't do this again, it was a bit of a hassle. pyramid is a Clojure(Script) library for doing cool things with graphs made of Clojure data. It provides the same capabilities as autonormal before: • Normalize your data for you, allowing datascript-like accretion of facts about entities over time with just a simple Clojure map! • Use https://edn-query-language.org/eql/1.0.0/what-is-eql.html to pull information out of deeply nested maps with blazing speed! You might be asking, "What do I get by using this new name, anyway?" Glad you asked. The latest version of pyramid includes a brand new capability: an experimental engine for querying your pyramid db (a map in normal form) using datascript-like "datalog" queries. Perfect for exploring a db from a REPL. Get the latest here: https://github.com/lilactown/pyramid Questions, comments, suggestions can be made in #pyramid. Bug reports go in github.#2021-10-2918:35ribeloit is funny that many people at the same time come across similar problems and find identical solutions#2021-10-2918:35ribeloa lot of people are disappointed with the way datascript works on the frontend and it is very good that things are emerging to replace it#2021-10-2918:36ribelo@U4YGF4NGM have you tested the performance of datalog queries compared to datascript?#2021-10-2918:37phronmophobicI've been also following @U0BBFDED7’s https://github.com/ribelo/doxa Really wish there was a matrix of all the options in this space.#2021-10-2918:37lilactownvery little benchmarking so far#2021-10-2918:38lilactownalso watching doxa 🙂 was an inspiration to provide basic datalog-ish query support for pyramid#2021-10-2918:38ribelo❤️#2021-10-2918:39lilactownalso huge shout out to @U051N6TTC who helped me get over some big hurdles early on in understanding how a query engine like this even should work 😄#2021-10-2918:40ribelo@U051N6TTC is wonderful and her work on #asami invaluable#2021-10-2918:41lilactownI imagine, given my current approach to parsing and resolving queries, that any speed improvements pyramid.query has over datascript will go away as I add more features. Only time will tell, though.#2021-10-2918:41lilactownthe biggest use case for pyramid (for me) is still doing fast EQL queries#2021-10-2918:42lilactownLike I said in the announcement, I found the datalog-ish queries immensely helpful when debugging and exploring a large db#2021-10-2918:45souenzzoI hope nobody makes a pyramid scheme with this library 😅#2021-10-2918:48phronmophobicI thought scheme was renamed to racket?#2021-10-2918:48phronmophobicit seems like any programming language could use a library like this#2021-10-2918:50ribelo@U4YGF4NGM q performance is not bad for the first version, looks like it will be great library#2021-10-2919:03wilkerlucioexciting times, seems like we need something like https://clojurelog.github.io/ for local normalized database maps 😛#2021-10-2919:46john@U0BBFDED7 "it is funny that many people at the same time come across similar problems and find identical solutions" Like you made a =>> six months before I did with injest/=>>, and it does a very similar thing. Had no idea 😆#2021-10-2919:48ribeloI have seen the injest and it looks much better than I did#2021-10-2919:52johnWell, I think yours has more optimizations which are interesting... Slightly different use-case I think. I plan to mention your lib in the reference section, seeing how similar in spirit it is.#2021-10-2920:04ribeloIn danzig I simply assume that we have a collection of maps, so I use native methods to deal with them and avoid reflection#2021-10-2920:05ribeloI recommend you take a look at the @UQ58AKW0J code#2021-10-2920:06ribeloor on @UK0810AQ2, who suffers from benchmarkosis 🙃#2021-10-2920:06ribelo@U050PJ2EU#2021-10-2920:07johnFor sure, I've been picking their brains. They've been helpful#2021-10-2920:21metasoarous> I thought scheme was renamed to racket? @U7RJTCH6J How am I just now realizing the pun here!? 🤯#2021-10-2920:47Karol WójcikA new release of holy-lambda v0.6.0: holy-lambda https://github.com/FieryCod/holy-lambda Holy Lambda is a library + set of utils that provide an extremely fast AWS Lambda runtime for Clojure. The release introduces new features and improvements to existing ones; fixes some long-standing bugs, and improves the dev experience. Few important changes: • support arm64 architecture for Native/Clojure backend, which means you can now develop lambdas on M1 🙂 • dependencies for Clojure & Native backend are not longer downloaded to local .holy-lambda directory, • compilation to .jar is now handled via :compile-cmd key and happens locally. No more adding local libraries via docker volumes. Also one may use arbitrary uberjaring tool now, • HL now distributes docker images with GraalVM + native-image included (See https://github.com/FieryCod/holy-lambda/pkgs/container/holy-lambda-builder/versions), • new arm64 runtime for babashka has been introduced, which means even lower cold starts! If you're already on holy-lambda v0.5.0 check a https://fierycod.github.io/holy-lambda/#/migration-guide. See the full changelog https://github.com/FieryCod/holy-lambda/releases/tag/0.6.0. For more information/questions visit #holy-lambda channel.#2021-10-3006:57Chris McCormickHello! I'm excited to announce the v0.0.1 release of Sitefox. 🦊 https://github.com/chr15m/sitefox It's a ClojureScript backend web framework that runs on Node. About one year ago I stopped using Django + Python and went all in on full stack cljs. I had to build a library to replace the "batteries included" from Django like routing, sessions, email and database etc. Sitefox is the result. I hope you'll find it useful in building our own websites using full stack cljs. 🙏 Quick start. You can use the npm init scripts to get started: For a fast backend only website using nbb: npm init sitefox-nbb mysite For a full stack web app using shadow-cljs: npm init sitefox-shadow-fullstack myapp If you would like to help spread the word, here is a tweet announcing the release: https://twitter.com/mccrmx/status/1454341307787137026 Thank you so much!#2021-10-3007:06borkdudeCongrats on the release!#2021-10-3008:04MattiasBut can you run in on the JVM in the browser? (Sorry, very cool release 🙂 )#2021-11-0415:38CaseyThis looks pretty slick! Nice to see a new take in this space.#2021-10-3112:01Adam HelinsHey y'all, first proper stable release for BinF, a Clojure(script) + Babashka library for all your binary needs: https://github.com/helins/binf.cljc Very useful for lower-level protocols and stuff like that. I've used it for some funky projects like processing MIDI or WebAssembly files 🙂#2021-10-3112:10gklijsAny plans to add things like Protobuf or Avro support?#2021-10-3113:00Adam HelinsI'd say you'd rather use that to build something higher-level and more specific like Protobuf if needed. I keep it as generic as possible because it was my frustrating experience that there wasn't any good tooling when you needed freedom and efficiency when doing something lower-level like parsing a binary file.#2021-10-3116:38Mathieu CorbinI released today the version 0.7.0 of Mirabelle, a stream processing engine written in Clojure. You can find more information about the tool on the documentation (https://www.mirabelle.mcorbin.fr/), and about this release on the changelog (https://www.mirabelle.mcorbin.fr/changelog/).#2021-10-3117:57pithylessI remember reading [0] about Mirabelle and it's been on my radar to build something with at some point. Is there a Slack channel where Mirabelle users hang out? [0] https://www.mcorbin.fr/posts/2021-03-01-mirabelle-stream-processing/#2021-10-3119:19Mathieu CorbinNo, I don't have a slack channel for it. For now the easiest way to reach to me is to create github issues with questions etc..., or with direct messages here#2021-10-3119:35valtterinbb-lambda-adapter is an NPM package that enables loading and running CLJS code on AWS Lambda NodeJS runtime using @borkdude’s nbb https://github.com/vharmain/nbb-lambda-adapter This enables rapid CLJS development directly in the Lambda console. There’s no need to pre-compile CLJS to JS so the feedback loop is very quick. See @borkdude’s tweet with a gif: https://twitter.com/borkdude/status/1454836645279186946 Thanks to @karol.wojcik @borkdude and @viesti!#2021-10-3120:01vlaaad> Evaluate nbb on the moon! > — tomorrow, probably#2021-11-0107:09Karol Wójcik@U6N4HSMFW idea: Can handlerProxy accept the array of handlers, and in that situation create a object of {handlerName1: handler1, handlerName2: handler2} ? Example:
module.exports = {
  ...handlerProxy("demo.cljs", ["handler1", "handler2"]),
};
#2021-11-0111:32borkdudePosted this on Reddit too#2021-11-0111:40Karol WójcikToday I'm releasing some more Lambda goodness 😄 NBB is a nice motivation 😄#2021-11-0113:17Jakub Holý (HolyJak)If you use @weavejester’s Ragtime for DB migrations and 🔥 to use Sean's awesome next-jdbc, you can do that now with the release of https://clojars.org/dev.weavejester/ragtime.next-jdbc (notice the group id)#2021-11-0113:30lispycloudsAnnouncing 0.0.2 of https://github.com/lispyclouds/contajners An idiomatic, data-driven, REPL friendly clojure client for OCI container engines The main feature is that its now #babashka compatible from source! Thanks a lot @eugen.stan @imdad.ahmed for the majority of the work! 🎉 🎉#2021-11-0113:35Karol WójcikAnnouncing https://github.com/FieryCod/holy-lambda-ring-adapter that is compatible with all holy-lambda's backends: native, babashka, clojure. This is an optimized version of what is already used in production in Retailic. Demo: https://9g7a59k254.execute-api.eu-central-1.amazonaws.com/api-docs/index.html Welcome screen: https://9g7a59k254.execute-api.eu-central-1.amazonaws.com/welcome-screen Source code: https://github.com/FieryCod/holy-lambda-ring-adapter/tree/master/examples/native/src/example Rationale I wanted to build a library that provides a simple full-featured integration between Ring and AWS Lambda. A Library that doesn't vendor-locks the user with AWS Lambda. With the holy-lambda-ring-adapter you don't care about the AWS Lambda, and just regularly develop your application locally with all the goodness you already know. You're entitled to deploy your application either to AWS Lambda or to regular servers with simple commands. Cold starts are optimized, and for our API with dozens of dependencies it's only <=500ms on ARM64. 🙂 EDIT: If you're interested in running Ring apps on AWS Lambda join #holy-lambda channel 🙂#2021-11-0209:46pezA new Calva is out calva https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.223. The main new feature is ClojureDocs integration. • ClojureDocs examples in the hover-lookup of symbols. So that you can at a glance see neat ways and caveats about Clojure core-ish symbols. Each example have two buttons/links: ◦ To Rich Comment, prints the example to a rich comment below the top level form you are editing/viewing ◦ To Output Window, prints the example to the REPL/Output window • A command for printing all clojuredocs examples for the symbol under the cusror to a Rich Comment, default bound to `ctrl+alt+r d` (to go well with the command for opening a new rich comment block). • A command for printing all clojuredocs examples for the symbol under the cursor to the Output/REPL window, `ctrl+alt+o d` When the next clojure-lsp is released, this will be available in ClojureScript as well.. See https://calva.io/clojuredocs/ to learn more. An early dev version of the hover is demoed in this tweet: https://twitter.com/pappapez/status/1452409528511762444#2021-11-0210:12StuartThis is fantastic, this is the pretty much the only featured I missed from Cursive 🙂 And the to rich comment / output window makes it even better than what cursive had.#2021-11-0211:51pezNow also on Youtube: https://www.youtube.com/watch?v=a4sm_B_mqhs#2021-11-0213:15martinklepschVery cool stuff#2021-11-0214:14ericdalloawesome work!#2021-11-0215:01richiardiandreaThis is great and I so so like Rich comments highlight! How does "Go to Rich Comments" work in case of multiple ones?#2021-11-0215:17pezHmm, sounds like I have created a Ux issue 😃 The command prints the example to a new Rich Comment.#2021-11-0215:20pezThere is a Go To Rich Comment in Calva, actually. Though it is not named like that (yet). It is named Create Rich Comment, which will create a new rich comment in “a good place”, which is most often below the current top level form. If there already is a rich comment there, then the command will go there.#2021-11-0216:33pezAnd the new clojure-lsp is out! If you are using ClojureScript, then reload the VS Code window and you will get those ClojureDocs hovers. 🎉 https://clojurians.slack.com/archives/C015AL9QYH1/p1635869261015700#2021-11-0216:28ericdalloclojure-lsp New https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.11.02-15.24.47 with lots of improvements and new features! 🎉 Check it out one of them, the live rename of locals For more information, come to #lsp#2021-11-0223:46Carsten BehringAa new release of , the idiomatic machine learning library for Clojure, is out. Version 0.1.1 adds support for unsupervised learning together with various unsupervised models (projections, clustering and manifold) https://clojars.org/scicloj/scicloj.ml/#2021-11-0312:10Jim NewtonI have been appointed chair of the organizing committee of the European Lisp Symposium for 2022, and I'm looking for a couple more reviewers to participate in the program committee. https://easychair.org/cfp/els2022 It would be great if one or two clojurites would be interested in participating in the committee. The main responsibility would be that you would need to read, review, accept/reject and give commentary on 2 or 3 paper submissions. The review process will probably be the first 2 weeks of February 2022. Anyone interested in taking part or if you have questions please let me know.#2021-11-0317:08mkvlr🎉 Clerk – Local first notebooks for Clojure – is now open source and we have a big new release out: • 🐙 https://github.com/nextjournal/clerk:scales: https://github.com/nextjournal/clerk#rationalehttps://storage.googleapis.com/nextjournal-snapshots/clerk/build/fdf5206fb60fe9230da5b92dbc4b26b504e8b759/index.html#/ ‼️📦 https://clojars.org/io.github.nextjournal/clerk🧪 https://github.com/nextjournal/clerk-demo🪵 https://github.com/nextjournal/clerk/blob/fdf5206fb60fe9230da5b92dbc4b26b504e8b759/CHANGELOG.md#02209-2021-11-03🐦 https://twitter.com/mkvlr/status/1455943025855811590 If you’d like to see what’s new, best check out the https://storage.googleapis.com/nextjournal-snapshots/clerk/build/fdf5206fb60fe9230da5b92dbc4b26b504e8b759/index.html#/notebooks%2Fviewer_api.clj and grab some 🌮, see https://storage.googleapis.com/nextjournal-snapshots/clerk/build/fdf5206fb60fe9230da5b92dbc4b26b504e8b759/index.html#/notebooks%2Fhow_clerk_works.clj or 🕹️ https://storage.googleapis.com/nextjournal-snapshots/clerk/build/fdf5206fb60fe9230da5b92dbc4b26b504e8b759/index.html#/notebooks%2Frule_30.clj. Helping spread the word is much appreciated. 🙏#2021-11-0317:09Noah Bogartwhat’s clerk?#2021-11-0317:14mkvlrdoh, thought about writing that but then thought the GitHub link would show the description but I guess that's wrong#2021-11-0317:15mkvlrupdated#2021-11-0317:16Ivanthat's a nice project :thumbsup:#2021-11-0317:22neupsh@U5H74UNSF just a heads up this URL returns 404 https://nextjournal.com/nextjournal/use-restriction#2021-11-0317:28javahippieWaiting to play with it since your :clojureD session, amazing! One question, though: No OSS License?#2021-11-0317:40rickmoynihanYeah was just going to ask that too — you state it’s open source but I don’t see the license. Congrats on the release though, it looks really good. I enjoyed playing with it briefly after your earlier announcement.#2021-11-0317:44mkvlr@U3MRWH35M oh, which URL?#2021-11-0317:44mkvlr@U0N9SJHCH @U06HHF230 oh yes, clearly forgot something. will fix the missing license in a bit#2021-11-0317:57neupsh@U5H74UNSF use restriction url i linked there#2021-11-0317:58mkvlrAdded https://github.com/nextjournal/clerk/blob/main/LICENSE (ISC)#2021-11-0317:59mkvlr@U3MRWH35M can’t find where it’s coming from, can you point me to the source?#2021-11-0318:15djblueAwesome, can't wait to try it out! Also, a bit off topic but seeing more projects use #babashka for tooling is great!#2021-11-0318:36neupsh@U5H74UNSF sorry I misunderstood you and thought you were asking which page was returning 404. The link i posted is in pricing page under the "What is Nextjournal's Fair Use policy"? FAQ, which ends the paragraph with Usage Restriction policy. And that link returns 404 when clicked.#2021-11-0318:41mkvlr@U3MRWH35M ah, thank you, I fixed it.#2021-11-0318:44Dimitar UzunovFrom the demo: ;; open clerk (browse/browse-url (str ":" port))#2021-11-0318:45Dimitar Uzunovbrowse is not required though, this is an alias to which namespace?#2021-11-0318:46djblue[clojure.java.browse :as browse]#2021-11-0318:46Dimitar Uzunovah thanks#2021-11-0318:47Dimitar Uzunovoh this is pretty neat#2021-11-0318:48neupshwhen you use polyglot notebooks can you share data from a cell using one engine to a cell using a different engine?#2021-11-0318:51mkvlr@ULE3UT8Q5 oh actually you can now pass {:browse? true} to serve!, will update the demo to reflect this.#2021-11-0318:53Dimitar UzunovOh it's in there, I just didn't know it's the java namespace, lines 15-16 are not needed :)#2021-11-0318:53Dimitar UzunovPretty clear demo :)#2021-11-0318:54Dimitar Uzunovoops
Execution error (OutOfMemoryError) at java.util.Arrays/copyOf (Arrays.java:3746).
Java heap space
#2021-11-0318:55Dimitar Uzunov(clerk/show! “notebooks/viewer_api.clj”)#2021-11-0321:14mkvlr@ULE3UT8Q5 I've seen this at times, it's a race condition where Clerk would try to write an infinite seq to disc. I'll see that I make the detection more robust or put some (overridable) guardrails in place#2021-11-0321:25Dimitar Uzunovanything I can provide as diagnostic data?#2021-11-0321:25Dimitar Uzunov@U5H74UNSF#2021-11-0321:39mkvlr@ULE3UT8Q5 does this happen for you every time? I have ideas for fixes and I'll let you know once I have something for you to try. If you can share more about your environment (machine, os) that could also be helpful. Thanks!#2021-11-0322:14Dimitar Uzunovopenjdk version “13.0.2” 2020-01-14 OpenJDK Runtime Environment AdoptOpenJDK (build 13.0.2+8) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 13.0.2+8, mixed mode, sharing) On Big Sur#2021-11-0407:22robert-stuttafordgaaaaah not enough time in the daaaaaay#2021-11-0416:26mkvlrWe released https://clojars.org/io.github.nextjournal/clerk/versions/0.2.214 earlier. Can recommend a bump.#2021-11-0412:31Felipe ReigosaIs it possible to write a drawing program in 9 lines of Clojure code? Yes! Check out the video explanation of my new MockMechanics machine on youtube: https://youtu.be/LBOjGktRqDI)#2021-11-0513:14rafaeldelboniHey Felipe this is very interesting, would you mind to share more about the technical stuff of your project like what you using to render the 3d graphics?#2021-11-0513:43Felipe ReigosaHey Rafael, thanks. I actually wrote the game engine from scratch, I'm just using Clojure and bare OpenGL (through lwjgl), so not much to tell. It will be open sourced soon so you can have a look if you like then. If you want to know more about the game itself though, I recommend the first video on my channel, I explain how it works and everything there. https://www.youtube.com/watch?v=HrwxbQj5mj0&amp;t=642s#2021-11-0516:40rafaeldelboni> so not much to tell Hahaha, man the integration with LWJGL is super interesting, I was wondering if anyone had made it already. I'm super interested, I was wondering if was possible to make a nice, and performatic, game engine combining clojure and LWJGL. Really exited to see your project, thanks for sharing#2021-11-0412:41mpenetMinimalistic "tool" (as in tool.deps) that attempts to handle dependencies version propagation in "multi-modules" repositories https://github.com/exoscale/deps-modules#2021-11-0417:07Joshua SuskaloVersion 1.4.0 of https://github.com/IGJoshua/farolero is released! • new facilities for requesting values from the user interactively and customizably to help library authors • fixes for hard-to-trace errors when using bound-fn • updated #clj-kondo linters • new documentation for how to integrate laziness with conditions https://github.com/IGJoshua/farolero#2021-11-0422:00Carsten BehringVersion 0.3.6 of https://github.com/scicloj/sklearn-clj is released! sklearn-clj gives easy access to most Python Sklearn estimators from Clojure standalone or as a plugin into • training methods return now all model attributes as Clojure data • Reference guide was updated here: https://scicloj.github.io/scicloj.ml-tutorials/userguide-sklearnclj.html https://clojars.org/scicloj/sklearn-clj#2021-11-0503:31pfeodrippeReleased version v0.4.0 of Recife - a Clojure Model Checker, https://github.com/pfeodrippe/recife \o/ Check the https://github.com/pfeodrippe/recife/commit/09e11f2f172b684af466c645208adf7f2ebc0654. The biggest feature is that now you can not only check your design, but also, with some effort, your implementation (very rough, but works)! It uses the generated traces from your model checker and randomly chooses traces which will be validated against (like PBT, but driven by the design), see an https://github.com/pfeodrippe/recife/blob/master/test/example/implementation/wire_1.clj#L118. I will be giving a quick talk about Recife at London Clojurians with the great @bruno.bonacci as the host next Tuesday, check https://www.meetup.com/London-Clojurians/events/279398890/. Now it's time to do proper documentation for this library.#2021-11-0506:25robert-stuttafordin the readme: (e.g. if the process will terminate or if the ).#2021-11-0509:28rickmoynihanInteresting — I’d quite like to use something like this; but my fear is that learning it would be harder than learning TLA+, as I’d need to learn both, and how one maps into the other. I’ve only dabbled in TLA+ and not enough to really grok it; but I do know clojure. What does this aim to make easier?#2021-11-0509:39msolliFor someone new to the concept of a model checker - how does it compare to property-based testing?#2021-11-0510:32Jakub Holý (HolyJak)I am attracted by the possibilities of model verification but I have never worked in the domain so I do not know many things, such as • As a backend clj developer, where I might use this in practice? • What is the least resistance way of getting productive with model checking? Do I need to learn TLA+? • What are the different approaches to model checking, their limitations and pros and cons => which is (not) suitable for my needs?#2021-11-0511:28rickmoynihan@U06BEJGKD: I’m no expert — but I think the main thing is that something like TLA+ aims to give you a proof of correctness for a model. Property testing doesn’t give you a proof of correctness; it just asserts that a given property holds for all tested inputs; of an implementation. i.e. the main differences to me seem to be in mathematical proof of correctness vs evidence of it… and also the difference between a model of a system and the system itself. A model being the thing you design and work on to get your thinking straight; before you engage in the implementation.#2021-11-0511:32rickmoynihanIf your process was: 1. develop and prove a model. 2. build an implementation of that model 3. test the implementation Then one of the things you want to do is ensure the proofs of the model carry over into your implementation. i.e. you need something to assure the implementation is a faithful recreation of the proven model. I suspect there are many techniques to doing this; but I’d imagine one would be writing property tests of the implementation which are directly derived from your model.#2021-11-0511:35msolliAha, that’s useful, thanks!#2021-11-0512:27pfeodrippeThanks for answering @U06BEJGKD question, @U06HHF230! @U06HHF230 @U0522TWDA You don't need to learn the TLA+ language at all, the concepts will be similar (e.g. invariants, state, temporal properties) as we call TLC (the TLA+ model checker) behind the scenes, you just have to keep using Clojure (it does not transpile CLJ to TLA+, it's real CLJ!). You will use model checking in practice only if you feel something is kinda important for your business, you definitely shouldn't need to use it to model a CRUD API, but it would be good to model, for example, some custom protocol you have which replicates data and which can make you lose a lot of money if it violates some invariant. See the business case for when to use and not to use at https://www.hillelwayne.com/post/business-case-formal-methods/, Hillel also has a lot of great posts about TLA+ (besides his wonderful newsletter). The best book to initiate at Model Checking I know is the one from Hillel itself https://link.springer.com/book/10.1007/978-1-4842-3829-5, there is even a entire suite of tests based on the book at Recife so you can follow it in Clojure (https://github.com/pfeodrippe/recife/blob/master/test/hillel_test.clj). One big limitation of model checking is that, while you don't need to write a Math proof (which it takes a LONG time and lots of qualified personal), it brute forces all the possible states, so it may take a while to finish. There are ways to mitigate that, but only by using is that you will feel. For example, there is something called the Small Scope Hypothesis which says that if it works using 2 or 3 entities, then it's very likely that it will work with many, so you don't need to be crazy and test 10 servers with 20 queues (it increases exponentially the number of states).#2021-11-0512:28pfeodrippeLet me know if you have some other questions, it's an experiment and I would be happy to improve based on the community's feedback :)#2021-11-0512:34rickmoynihan> You don’t need to learn the TLA+ language at all, the concepts will be similar (e.g. invariants, state, temporal properties) Ok, but aren’t the best descriptions of these concepts and how to wield them going to be in resources that teach the TLA+ language?#2021-11-0512:44pfeodrippeYes, Rick, absolutely, there are tons of resource out there for it in TLA+. There are some new model checkers, like the one in Rust, which also explain it beautifully https://docs.rs/stateright/0.28.0/stateright/. Others in Java, C# etc. For us it may suffice to say to start that an invariant is just an assertion about one state (a function) and a temporal property is an assertion about multiple states (a function + operators like always or eventually). But I agree we definitely need to work on documentation 😅, you can check about the concepts also at https://learntla.com/introduction.#2021-11-0512:55rickmoynihanThanks for the links… It’s a big area, and figuring out an appropriate starting point / journey is part of the challenge. For example - previously I started with LL’s excellent video series… It was quite refreshing to see a turing award winner, not taking himself too seriously and dressing up randomly as a clown 😆 I went from there to playing around with the TLA+ IDE and tools, and trying out some examples… but my attention drifted onto other things. I guess I never quite got enough of an in, to figure out if what I was learning was appropriate for the problems I might apply it to.#2021-11-0512:55rickmoynihani.e. was TLA+ even the right tool — or would I better with Idris or Coq?#2021-11-0513:06pfeodrippeYeah, things are getting better in the TLA+ tooling, but it's slow progress, so I went to full Clojure with the ready to be used tools. Idris and Coq are much harder IMHO as you they lean into formal proofs, which takes WAAAY longer to build. They are complementary to model checker, but low ROI for most of the things we need to do in practice.#2021-11-0513:06pfeodrippeNice to see you have some experience :)#2021-11-0513:07pfeodrippeI've created an issue so you can add questions if you want there and I will try to answer in the talk https://github.com/pfeodrippe/recife/issues/6. But you can keep asking me here o/#2021-11-0604:30fingertoe@rickmoynihan I also loved the LL videos. There was some meta humor in the fact that it was so apparent that he was attempting to move his listeners from state a to state b in a provable manner.. The displayed pattern of his process re-enforced the whole point of the curriculum.#2021-11-0608:16Jakub Holý (HolyJak)What video series are you talking about? Sounds fun!#2021-11-0614:18pfeodrippeProbably https://youtube.com/playlist?list=PLWAv2Etpa7AOAwkreYImYt0gIpOdWQevD#2021-11-0812:17rickmoynihanYes that’s the videos — though the website is slightly better and has links to supporting materials: http://lamport.azurewebsites.net/video/videos.html#2021-11-0516:26rafaeldelboniReleased version v0.0.3 of nota - A Static Markdown Blog/Site written using fulcro, pathom, babashka and no backend. https://github.com/rafaeldelboni/nota The main idea behind is create a page, that could be hosted using something like github-pages and would read markdown files and a simple "database.edn" and render pages and posts with a static route. It has some babashka tasks that can be used to create new pages and posts. https://rafael.delboni.cc/nota/ (Example running in gh-pages) Kudos to @fi.morais.mail that made in this release the amazing visuals and CSS. I hope you all like.#2021-11-0518:22Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.1020 is now available: • https://clojure.atlassian.net/browse/TDEPS-83 Invalidate classpath cache when local dep manifests change • Add new clj -X:deps list program to list the full lib set on the classpath, see https://clojure.github.io/tools.deps.alpha/clojure.tools.cli.api-api.html#clojure.tools.cli.api/list for more info • Bump deps to more recent versions - aws-api, jetty-client, etc • Clean up exception handling for -X/-T • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1067#2021-11-0800:35seancorfieldcom.github.seancorfield/expectations {:mvn/version "2.0.137"} -- The clojure.test-compatible version of the Expectations testing library -- https://github.com/clojure-expectations/clojure-test -- v2.0.137 is the "gold" release of the 2.0 version that has been in testing for five months (after several months of development) and is the first new release of this library since December 2019. Changes since Alpha 2 in June include: exported clj-kondo configuration, bug fix for dynamically constructed regex predicates, documentation updates (thank you @dharrigan for inspiring some of those!), and a switch to build.clj like the other projects I maintain. Follow-up in #expectations#2021-11-0803:23djblueportal Portal https://github.com/djblue/portal/releases/tag/0.17.0, a data visualization / navigation tool, is now available! 🎉 Since my last post on #announcements, a few major additions have happened: - A https://marketplace.visualstudio.com/items?itemName=djblue.portal to host the portal ui directly in vs-code is available. - An intellij extension to host the portal ui directly in intellij is available. - Currently must be installed via a https://github.com/djblue/portal/releases/download/0.17.0/portal-extension-intellij-0.17.0.zip as it hasn't been published yet. - Multi-select functionality • This is really handy for diffing two arbitrary values! Many other improvements have happened, for more info check out the https://github.com/djblue/portal/blob/master/CHANGELOG.md. And as always, you can try out all the UI changes via the https://djblue.github.io/portal/.#2021-11-0803:26jumarAny chance to also have “Emacs extension” soon?#2021-11-0803:29djblue@U06BE1L6T these extensions act as hosts to the Portal UI (a reagent web app) and as far as I know emacs doesn't have a readily available way to host web apps. If there is an easy way to do so, please let me know!#2021-11-0803:31djblueAs an emacs user, https://github.com/djblue/portal#editor-integration is my current portal+emacs integration.#2021-11-0803:36jumarAh, good - thanks for sharing.#2021-11-0803:37djblueWhat the intellij extension looks like:#2021-11-0803:40djblueWhat the vs-code extension looks like:#2021-11-0804:07Ben SlessIt is possible to embed in Emacs as a XWidget, I think.#2021-11-0804:13djblue@UK0810AQ2 I've seen https://github.com/akirakyle/emacs-webkit in the past which wasn't ready yet. Any links for XWidget embedding?#2021-11-0804:16djblueAny embedding of the portal UI would require a js vm equivalent to v8 👌#2021-11-0804:38Ben SlessThis might be a place to start https://www.reddit.com/r/emacs/comments/4srze9/watching_youtube_inside_emacs_25/#2021-11-0815:06Jakub Holý (HolyJak)I thought Emacs was a real web browser?! troll#2021-11-0815:41Ben SlessAlready does, but it doesn't render js#2021-11-0817:11wilkerlucionice, is there docs on how to use the intellij extension?#2021-11-0817:13djblue@U066U8JQJ Not yet, but all you need to do is install the extension via the zip artifact. Then make sure you have 0.17.0 installed in your process and use the portal.api as normal 👌#2021-11-0817:15djblueOhh, also specify (def idea (portal.api/open {:launcher :intellij}))#2021-11-0819:01wilkerlucio@U1G869VNV thanks, but still not able to get it, I updated portal to 0.17.0 on my deps, installed by opening the portal-extension-intellij-0.17.0.jar on intellij, it looks its correctly installed#2021-11-0819:01wilkerluciobut when I try to run the (def idea (portal.api/open {:launcher :intellij})), nothing happens#2021-11-0819:02wilkerlucio(installation looks like this)#2021-11-0819:03djblueMight be related to https://clojurians.slack.com/archives/C0185BFLLSE/p1636395361039000?thread_ts=1636340302.025800&amp;cid=C0185BFLLSE#2021-11-0815:04cjsauerIntroducing joinery, a protocol and stock implementation for accessing in-memory graph-like/normalized data structures using standard clojure(script) map interfaces. https://github.com/cjsauer/joinery#2021-11-0815:36robert-stuttafordThis is really interesting#2021-11-0815:51cjsauerThanks! I’ve been experimenting with tools like: • @U4YGF4NGM’s https://github.com/lilactown/pyramid@U051N6TTC’s https://github.com/threatgrid/asami@U0BBFDED7’s https://github.com/ribelo/doxa@U066U8JQJ’s https://github.com/wilkerlucio/pathom3 smart-map I noticed this pattern of wanting to pass the “database” into a function pipeline (or UI tree) with map-like access being the driver of join resolution. This is as opposed to having the query in hand upfront. That “smart map” interface (coined by Wilker) is really intriguing, so this is my attempt at bringing it to other data structures.#2021-11-0816:54lilactownthis looks kinda like datomic/datascript's lazy entity map#2021-11-0816:54lilactownbut more general. 😄 really cool!#2021-11-0816:55lilactowncan I print a map with cycles?#2021-11-0817:09cjsauerYea, datascript’s entity impl gave me some hints at how to impl a custom map type. I really need to add a prior art section to the readme…lots of inspiration in this space. Printing just defers to the wrapped map at the moment, so cycles won’t be visible, and you’ll see joins in their unresolved state, ie [:thing/id 1] . I can see a recursive-print being useful tho. It’d have to keep track of seen entities of course to avoid infinite loops.#2021-11-0817:11cjsauerOr maybe more generally, a denormalize function.#2021-11-0817:16pithylessThis looks cool; another prior art is Fulcro's database structure - which could also give some inspiration for how maybe we can build tooling (similar to Fulcro Inspector) that is not implementation-specific.#2021-11-0817:19pithyless@U6GFE9HS7 one thing I would reconsider is if is-join? protocol method should not be [this table v] - one can always ignore it (as in the case of the joined-map), but I have a suspicion sometimes the DB/Table could be responsible for returning this data (e.g. an index/cache of ident links).
#2021-11-0817:23cjsauerAdded a https://github.com/cjsauer/joinery#prior-art section to the readme. @U05476190 I think that’s a great idea. Especially given that some data structures come with an upfront schema. is-join? would need to reference not only the schema, but also the key k in order to make its decision.#2021-11-0817:26pithylessah right, just realized that the protocol says nothing about how to get values from table; just how to follow references#2021-11-0817:43cjsauerIn fact, I could see both is-join? and join requiring an arg list like [db entity k v] to be fully flexible…#2021-11-0919:41CaseyVery interesting, I love the many takes on this pattern. Any plans to add updating, or will it remain read only?#2021-11-0920:27cjsauer@U70QFSCG2 me too, it’s a very interesting space. This protocol is specifically focused on read-only. Updating tends to be handled by the underlying source quite well (asami/datascript transaction, or just an update-in when using a plain table).#2021-11-1215:44CaseyTook it for a spin, and it's pretty slick. I'm tooling around with a turn based game with lots of gnarly state. But every function is pure the whole way through. Was using datascript before, but datalog was feeling very heavy, joinery is a nice and lightweight way to treat the state map as a map, but keeping it normalized!#2021-11-1217:54lilactown@U70QFSCG2 if you find yourself looking to select nested trees of data - try out https://github.com/lilactown/pyramid along with it 😉#2021-11-1218:17cjsauerWas just going to suggest that 🙂 pyramid and joinery work really well in tandem. I like that pyramid handles the adding/normalization logic, and joinery can give you a “smart map” interface to it. Really fun combo. I also began exploring other options when datascript started feeling heavy (transactions especially), and I find this to hit a really nice niche for certain applications.#2021-11-1218:17cjsauerAlso thanks for trying it out 🙂#2021-11-1218:48CaseyCool! I'll check pyramid out. I've used specter for years before deciding that normalized graphs are much easier to work with (after using pathos and fulcro). Specter is really powerful, but unnecessary if you can avoid the complexity of nested data#2021-11-0815:32Carsten BehringVersion 1.6.0 of clj-py-R template for polyglot Clojure has been released. Main changes are: - far faster Docker build and minimal Dockerfile thanks to base images on Dockerhub - support for Singularity and Gitpod was added https://clojars.org/clj-py-r-template/clj-template#2021-11-0902:06amarunminify uses your source map to get sensible JS stack trace errors. Made with @borkdude's #nbb -- a civilized way to experience node https://github.com/xfthhxk/unminify#2021-11-0912:58blueberryNumerical Linear Algebra for Programmers 1.0.0 has just been released! Check it out at: https://aiprobook.com/numerical-linear-algebra-for-programmers/#2021-11-0913:01Teemu KaukorantaCongratulations on the book! Crossposting to different channels is discouraged, and this channel is for project/library announcements. #news-and-articles is probably the right place for this.#2021-11-1108:04skurowith a bit of a delay, but the recordings from the Dutch Clojure Meetup on Mirabelle, the stream processing engine by @mcorbin are now published on https://youtu.be/auafRjne9SA#2021-11-1110:31Jakub Holý (HolyJak)I think this channel is for lib releases, while articles and videos should be posted in #news-and-articles#2021-11-1414:35skuroYou are right, I'll chance channel next time. Thanks!#2021-11-1204:32tony.kayI've created the first version of a Fulcro RAD template. https://github.com/fulcrologic/fulcro-rad-template This template includes everything needed to get started with Datomic Free, Fulcro, and Fulcro's Rapid Application Development add-on (including a script for customizing the top-level package name for the files). In the coming weeks expect to see new announcements about videos and documentation on the #news-and-articles channel.#2021-11-1211:04borkdudeThe babashka AWS pod 0.1.0 is out. It is a pod based on Cognitect's aws-api and gives access to it from babashka. • Bump deps (see `deps.edn`) • Add `pod.babashka.aws.logging` namespace with `set-level!` function. See https://github.com/babashka/pod-babashka-aws#logginghttps://github.com/babashka/pod-babashka-aws/issues/41 • Fix transit serialization of `Throwable` and `Class` in `:Error` payload. https://github.com/babashka/pod-babashka-aws/issues/30 https://github.com/babashka/pod-babashka-aws/blob/main/CHANGELOG.md#v010 You can run it directly from the pod registry like this: https://github.com/babashka/pod-registry/blob/master/examples/aws.clj Follow up in #babashka#2021-11-1213:45tony.kayFulcro 3.5.8 is out. This release includes a minor change that is necessary for Fulcro to work properly when using the latest Clojurescript compiler. https://github.com/fulcrologic/fulcro#2021-11-1214:09Eric ScottJust released v 0.1.2 of a library that allows you to interact with Jena RDF models using the ont-app/igraph protocol: https://github.com/ont-app/igraph-jena The aim of IGraph is to provide a common set of abstractions over a wide variety of graph representations that allow each of them to be treated as a clojure-y container using IFn:
(g) -> {s {p #{o}}}
(g s) -> {p #{o}}
(g s p) -> #{o}
(g s p o) -> truthy
RDF versions if IGraph also have support for mapping between namespaced keywords and URIs.
#2021-11-2414:08KelvinSorry for being a bit late to the party, but I want to say this is great! My company is working on an RDF-based graph database system, and the ont-app libs are very helpful in designing RDF graphs.#2021-12-1118:48Eric ScottThanks so much for the kind words! Please let me know if something is causing you grief, and try to get on it as soon as I can.#2021-11-1214:17Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.1029 is now available • https://clojure.atlassian.net/browse/TDEPS-212 Cover a much wider range of valid git dep urls, including git file urls • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1071#2021-11-1214:52tony.kayFulcro RAD 1.1.0-RC2 is on Clojars. This release fixes a number of minor bugs, improves docstrings, and adds a number of helper functions that are useful for when you take control of rendering a generated form or report. The biggest addition in this version is a new form debugger. If you are using the latest semantic-ui rendering plugin, then you can add fo/debug? true to a form, and all sorts of useful info will be rendered next to the form in the UI to help you debug issues. https://github.com/fulcrologic/fulcro-rad/ Also, the latest rendering plugin that uses Semantic UI was released as well: version 1.2.0 at https://github.com/fulcrologic/fulcro-rad-semantic-ui, which contains the logic for the debug option, along with a few other minor improvements.#2021-11-1217:00Jakub Holý (HolyJak)https://github.com/holyjak/clj-concordion{:tag :a, :attrs {:href "https://github.com/holyjak/clj-concordion"}, :content ("https://github.com/holyjak/clj-concordion")}https://github.com/holyjak/clj-concordion - the beveloper-friendly, simple BDD tests using Clojure and clojure.test, based on http://Concordion.org - upgrades to the latest Concordion 3.1.3 and adds support for clj-kondo#2021-11-1221:44Jakub Holý (HolyJak)Release 2.1.2 which actually exports the kondo config correctly 😅#2021-11-1222:51Jakub Holý (HolyJak)Many thanks to @U04V15CAJ for discovering the problem and helping me fix it. You rock!#2021-11-1222:50Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.6.4 ea76dff is now available • java-command - add control over using classpath file with :use-cp-file (default=:auto) • compile-clj - can now accept java-command passthrough args :java-cmd, :java-opts, :use-cp-file#2021-11-1223:53Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.6.5 a0c3ff6 is now available • git-process - NEW task to run an arbitrary git process and return the output • git-rev-count - updated to use git-process, added :git-command attribute#2021-11-1300:59tony.kayI've updated the Fulcro RAD book! There is a new chapter that has been desperately needed that describes how to go about doing the most common "outside the box" customization to RAD forms. RAD is a rapid-application development library add-on for Fulcro. It leverages Fulcro, React, and database/rendering plugins to allow you to quickly create full-stack web/mobile/desktop React applications in a declarative manner that eliminates a huge amount of manually-written UI, networking, and database code. https://book.fulcrologic.com/RAD.html For those that want to jump directly to the new content: https://book.fulcrologic.com/RAD.html#_advancing_your_forms_taking_control_of_form_implementation#2021-11-1421:40seancorfieldSince access to the infrastructure hosting http://clojure-doc.org has been lost and nothing merged has been able to be updated on the site for maybe three years now, I have set up a (work-in-progress) version of the Clojure Guides site at https://clojure-doc.github.io/ as a GitHub organization site, powered by Cryogen. I've been a contributor to the old site for years and I've talked with Michael Klishin several times about migrating it to a GitHub repo like this. I just finally found the time and inclination to do the work. All of the old content should be present but the formatting will likely be a bit messed up in places as I continue refining and editing the raw material. I've created #clojure-doc to discuss the new version of the site and I welcome contributors (please!). Follow-up in the #clojure-doc channel.#2021-11-1521:23eggsyntaxI wonder whether it's worth a rename -- the clojure-doc vs clojuredocs name clash has been a point of confusion for new users IME.#2021-11-1521:52seancorfieldI'm hoping that the http://clojure-doc.org domain can be pointed at the GH docs domain. There's already a CNAME in place.#2021-11-1521:52seancorfield(the URLs are different though so that might also be confusing for some folks)#2021-11-1520:21borkdudeneil is a CLI to add common aliases and features to deps.edn-based projects. By request neil is now available as a clj -T tool! https://github.com/babashka/neil#tools-usage Also some things have been improved in the latest versions. Install the most recent version with:
clj -Ttools install io.github.babashka/neil '{:git/tag "v0.0.17"}' :as neil
Then run this:
clj -Tneil add-dep :lib org.clojure/tools.cli
to add a dep. Or run:
clj -Tneil add-build
to add a build.clj file + config. By default it will add the latest tools.build version. If it was already added, it will re-add the newest.
#2021-11-1614:52Matheus BernardesIntroducing https://github.com/clj-holmes/clj-holmes a CLI SAST (Static application security testing) tool which was build with the intent to find vulnerable Clojure code via https://github.com/clj-holmes/clj-holmes-rules that use a simple https://github.com/clj-holmes/shape-shifter but it can also be used to find any kind of https://github.com/clj-holmes/clj-holmes-rules/blob/main/correctness/schema-require-typo.yml. By now we're going to focus our efforts to properly document and test all the projects in the clj-holmes ecosystem but please fell free to open discussions and contribute with it.#2021-11-1616:51borkdude@U02M2U71Q79 Interesting project. I see in the readme that you were inspired by grape. I've also used that inspiration to use clojure.spec here: https://github.com/borkdude/grasp.#2021-11-1617:10Matheus BernardesYeah, I'm still working in the doc but grasp was also one of my inspirations t-hanks. I just wrote it from "scratch" because I was trying to learn new things during the process.#2021-11-1617:16borkdudeOf course! :)#2021-11-1617:21Matheus BernardesAlso the idea was to provide a really simple API for creating rules since the security folks from my team does not know exactly how to write code.#2021-11-1619:15mynomotoIt's this like semgrep but clojure specific? https://semgrep.dev/#2021-11-1619:17Matheus Bernardesit is exactly where I'm aiming @U05094X3J#2021-11-1619:37vemvyeah tooling-wise sky is the limit. something like grasp seems a reasonable baseline, not sure if that will survive a macroexpansion like -> (clj-kondo certainly does that) Something like https://github.com/clj-holmes/clj-holmes-rules/blob/295aafe4420b8e9e2ce1f9f9e795233fd8c5f189/security/weak-hash-function-md5.yml#L11 is very accurately implementable with Eastwood (tools.analyzer) tech - it will survive arbitrary macroexpansions, and values known at compile-time (e.g. "MD5" is the value of a var) Either way, 👏 && 🎩 s off!#2021-11-1620:51borkdudeIt depends entirely on the use case. Currently grasp doesn't expand any macros. But I can imagine hooking it up with tools analyzer or so wouldn't hard and then it could. Right now it (ab)uses SCI to understand the ns form with respect to resolving symbols, but this could also be handled 1) using the clj-kondo approach, or 2) tools analyzer.#2021-11-1620:51borkdudeThe use case can also be to grep for the surface form, not the expanded form#2021-11-1620:52borkdudeI'm using grasp myself mostly for statistical purposes: how do people use X, to inform choices like: how much time do I want to spend on feature X for clj-kondo or SCI or JIRA-1xxx#2021-11-1811:36Matheus BernardesIn the beginning of the project we tried to use tools.analyzer but we kind of get lost in the AST and we did not had the time to understand it since we're going to use it at the company we work for 😕 so the currently use case is to only grep the surface without macro expansion.#2022-11-0409:31MIJOTHYsorry for the necro; I’m curious what motivated having this as a separate tool vs integrating with semgrep (or other tools)? Are there some limitations to semgrep that make it unfit for clojure usage?#2022-11-0412:36Matheus BernardesI was just on the mood to code it from scratch. But it’s in my personal todo to implement it using semgrep.#2022-11-0412:38MIJOTHYah thanks. let me know if i can help out, as im using semgrep at work for other stuff and it would be cool to apply it to clojure too#2021-11-1622:47wilkerlucioRelease [com.wsscode/pathom3 "2021.11.16-alpha"]! This release includes: • Add extension point ::p.error/wrap-attribute-error • Fix batch calls with distinct parameters • Add pco/final-value helper to mark a value as final https://clojars.org/com.wsscode/pathom3#2021-11-1721:21uochanJust released antq ver 1.3.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Libraries in :local/root deps can be detected now. This may be useful for multi moduled projects. And also fixed a authentication bug for private repositories.#2021-11-1722:25ingesolFirst release of a tiny re-frame wrapper for clj-statecharts. It provides an integration and some nice utilities. https://github.com/ingesolvoll/re-statecharts#2021-11-1816:19tony.kayI’ve released Fulcro RAD 1.1.0-RC3 (and fulcro-rad-datomic 1.1.0-RC1, and fulcro-rad-sql-0.0.6-alpha). These new versions remove hard dependencies on Pathom 2, but allow you to explicitly require either Pathom 2 or the new Pathom 3 library (which has a new package/architecture). A new version of the demo application is on the pathom3 branch of the fulcro-rad-demo repository (https://github.com/fulcrologic/fulcro-rad-demo/tree/pathom3). Note, the SQL side of the demo is not finished/tested. https://github.com/fulcrologic/fulcro-rad/ You will have to make sure you have an explicit require of Pathom 2 if you upgrade a current app (which you should have had already(, but there should be no breakage in the pre-existing pathom namespace. There is a new pathom3 namespace that has the code for integrating with the newer version.#2021-11-1819:09vlaaadNew version of remote-repl — 1.2.12 https://github.com/vlaaad/remote-repl Remote REPL is a REPL that sends input to another REPL over the network and prints results back, a.k.a. REPL client. This version changes behavior of :reconnect true option to always reconnect (instead of reconnecting only on network errors). It also makes it easier to install remote REPL as a clj tool (i.e. clj -Tremote-repl repl :port ...)#2021-11-1913:01borkdudeAnnouncing carve v0.1.0 https://github.com/borkdude/carve Carve is a tool which lets you discover unused vars in your project and offers an interactive way to remove them. Among other improvements added over the last few months, it can now be used as a clojure -T tool: Install: clj -Ttools install io.github.borkdude/carve '{:git/tag "v0.1.0"}' :as carve Use: clj -Tcarve carve! '{:paths ["src"] :report {:format :text}}' Aside from running on the JVM and as a binary, can also run as a babashka script: https://github.com/borkdude/carve#babashka#2021-11-1916:04Lennart BuitThat emoji of you is golden tho, who added that :’)#2021-11-1916:05borkdudeIt wasn't me ;)#2021-11-2001:26ericdalloclj-easy Announcing first release of https://github.com/clj-easy/stub, a tool/library to generate stubs (mocked code) for a given classpath! This tool should help other projects that want to know about some code even if the jars don't provide the source code, for example with that https://clojure-lsp.io//https://github.com/clj-kondo/clj-kondo should be able to analyze closed source jars like Datomic, generate the stubs with this tool and then provide most features like completion, linting and other cool features! 🎉 For more information, come to #clj-easy!#2021-11-2115:55Sam RitchieI’ve just released v0.20.0 of the #sicmutils computer algebra system! This release adds a bunch of improvements around support for differential geometry + general relativity problems. Every piece of code from Sussman and Wisdom’s http://xahlee.info/math/i/functional_geometry_2013_sussman_14322.pdf book now runs https://github.com/sicmutils/sicmutils/tree/main/test/sicmutils/fdg. Highlights: • https://github.com/sicmutils/sicmutils/blob/main/test/sicmutils/fdg/einstein_test.cljc#L41 are now computed (in the tests!) in 90 seconds. Not bad for the equations governing the evolution of our universe. • The define-coordinates macro allows you to install a full set of bindings for a manifold’s coordinate functions + vector and form field operators into a namespace • The complex number reader literal now handles vector inputs like #sicm/complex [1 2], and the print representation uses this format vs the old #sicm/complex "1+2i" (still supported!) Sponsor link, if you want to support this work ❤️: https://github.com/sponsors/sritchie Clojars: https://clojars.org/sicmutils/sicmutils detailed release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.20.0 cljdoc: https://cljdoc.org/d/sicmutils/sicmutils/0.20.0 Cheers!#2021-11-2212:13vlaaadI’m proud to present an initial release of tweet-def library — tweet as a dependency! 🎉 https://github.com/vlaaad/tweet-def 🎉 Using this library you can depend on one-liners tweeted by other Clojurists!#2021-11-2212:17imre😢
user=> (tweet/def "")
Execution error at io.github.vlaaad.tweet-def/def (tweet_def.clj:53).
EOF while reading
#2021-11-2212:19vlaaadoh no#2021-11-2212:20borkdude@U47G49KHQ will you also make an extension for tools.deps.alpha? it has extensible multimethods. I'm sure the community will make good use of it.#2021-11-2212:30vlaaadI think this is a great idea, and I asked in #tools-deps yesterday about it#2021-11-2212:31vlaaad@U08BJGV6E I released a hotfix: v2 works on your tweet#2021-11-2212:34imre🎉
; clj -Sdeps '{:deps {io.github.vlaaad/tweet-def {:git/tag "v2" :git/sha "134a803"}}}'
Checking out:  at 134a8033b371cbb783ff4011175666388fca6dec
Clojure 1.10.3
user=> (require '[io.github.vlaaad.tweet-def :as tweet])
nil
user=> (tweet/def "")
#'user/<<-
user=> (def a 1)
#'user/a
user=> (<<- (if (odd? a) 1) 3)
1
#2021-11-2212:34imrenice#2021-11-2212:34imrethe example in the readme is slightly off, though#2021-11-2212:35vlaaadwhat’s wrong there?#2021-11-2212:38pezOMG, this is awesome, @U47G49KHQ!#2021-11-2212:38imreah no sorry, I confused the readme with the comment block in tweet_def.clj :s#2021-11-2212:41vlaaadah yeah, that comment now is a bit weird#2021-11-2212:44pezI challenge the immutability of tweets, though. 😃 They can be deleted and also made private/followers only.#2021-11-2212:44vlaaadThis is a first truly social dependency! Where else can you go to definition of some function and leave reply to it with some memes#2021-11-2212:44flowthingGists?#2021-11-2212:45vlaaad@U0ETXRFEW, your critique equally applies to git dependencies#2021-11-2212:45borkdudeipfs?#2021-11-2212:45pezTrue, true#2021-11-2212:45borkdudegists can already be used as gitlibs#2021-11-2212:45vlaaadwhy not straight to ethereum chain layer 1#2021-11-2212:46vlaaad“pay $100 to deploy your oneliner”#2021-11-2212:46vlaaadbut then it’s forever#2021-11-2212:46pez😃#2021-11-2212:46pezA better choice is probably #convex then.#2021-11-2212:47borkdudeI think I'll just stay with tweet-def#2021-11-2212:48borkdudeI mean, what more do you need, if a library is longer than a tweet, it's obviously too complex#2021-11-2212:49pezSo then you won’t vote for a feature request that tweet/def should unwind twitter threads?#2021-11-2212:51borkdudePut it in a tweet and then we can build a JIRA around tweets#2021-11-2212:52borkdudeif your proposal is longer than a tweet, it's not a good one#2021-11-2212:52borkdudetwira#2021-11-2212:52vlaaadit’s like amazon’s 6 pagers, but shorter#2021-11-2212:54borkdudealthough I think there is a place for unwinded tweets to store base64-encoded blobs... tweet-def-lfs#2021-11-2216:28vlaaadOne downside of twitter deps is unclear license for the code…#2021-11-2216:29vlaaadlooking at the twitter’s terms of service it seems by default tweet deps can be used only by twitter inc 😄#2021-11-2307:42robert-stuttafordwhat could go wrong lol#2021-11-2317:06borkdude🤯 https://twitter.com/MrEbbinghaus/status/1463192005429891076#2021-12-1615:05borkdudehttps://twitter.com/borkdude/status/1471496169691836427#2021-12-1615:24imrenow I think I might want to have this on my dev classpath#2021-11-2314:39athosI just published the first release of sweet-array https://github.com/athos/sweet-array, an array manipulation library for Clojure with sweet array type notation and more safety by static types! • Defines a concise and intuitive array type notation, and provides a generic array constructor which can be used for any types and dimensionalities • Automatically inserts type hints for arrays based on the results of type inference, which reduces the cases where users have to add type hints manually#2021-11-2315:25Noah Bogartthis is cool! any particular reason you didn’t wrap/re-export alength?#2021-11-2315:59respatializedthis seems very useful for when you want better utilities for working with arrays but you might not want to pull in all the dependencies of dtype-next - cool stuff!#2021-11-2401:47athos@UEENNMX0T Hi, thanks! The only thing we can do for that is type checking, so I didn’t give it much priority. But from the completeness point of view, it might be good to add it. @UFTRLDZEW Yeah, dtype-next is powerful and useful but could sometimes be overkill. This library can be used for little Java interop things like varargs method calls.#2021-11-2316:00Alex Miller (Clojure team)https://github.com/clojure/core.async 1.5.640 is now available (all fixes in both CLJ and CLJS): • https://clojure.atlassian.net/browse/ASYNC-204 On put to closed channel, commit handler to allow pending alt ops to be cleaned up • https://clojure.atlassian.net/browse/ASYNC-235 Fix ioc-macros/return-chan registers a callback with incorrect arity • https://clojure.atlassian.net/browse/ASYNC-144 Tweak docstring in pipeline-async • https://clojure.atlassian.net/browse/ASYNC-238 Fix a/map with empty chan vector hangs Several of these are important bug fixes and I would recommend updating.#2021-11-2316:48Ben SlessThank you!#2021-11-2316:04Alex Miller (Clojure team)https://github.com/clojure/spec.alpha 0.3.214 is now available: • https://clojure.atlassian.net/browse/CLJ-2606 Add support to transform trailing maps on instrumented functions into kvs (really only relevant for 1.11.0-alpha1+)#2021-11-2316:05Alex Miller (Clojure team)(same change applied to spec 2 as well, but no releases there)#2021-11-2316:51cyppanBy the way, do you have any info about the state / roadmap of spec2?#2021-11-2321:57Alex Miller (Clojure team)no, sorry#2021-11-2319:51Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.11.0-alpha3 is now available: • https://clojure.atlassian.net/browse/CLJ-2667 Add functions to parse a single long/double/uuid/boolean from a string • https://clojure.atlassian.net/browse/CLJ-2668 Add NaN? and infinite? predicates • https://clojure.atlassian.net/browse/CLJ-1925 Add random-uuid • https://clojure.atlassian.net/browse/CLJ-2664 Add clojure.java.math namespace, wrappers for java.lang.Math • https://clojure.atlassian.net/browse/CLJ-2666 Make Clojure Java API javadoc text match the example • https://clojure.atlassian.net/browse/CLJ-1360 Update clojure.string/split docstring regarding trailing empty parts • https://clojure.atlassian.net/browse/CLJ-2249 Clarify clojure.core/get docstring regarding sets, strings, arrays, ILookup • https://clojure.atlassian.net/browse/CLJ-2488 Add definition to reify docstring • https://clojure.atlassian.net/browse/CLJ-1808 map-invert should use reduce-kv and transient • https://clojure.atlassian.net/browse/CLJ-2065 Support IKVReduce on SubVector • Update dep to spec.alpha (0.3.214)#2021-11-2320:57borkdude@U04V70XH6 are you already running it in production ;-)?#2021-11-2321:16seancorfieldWe'll have it in QA by end of day. Our next backend production build will be next week 🙂#2021-11-2321:16seancorfield(a bunch of folks are off this week due to Thanksgiving)#2021-11-2321:52Alex Miller (Clojure team)Docs for new things: • https://clojure.github.io/clojure/branch-master/clojure.java.math-api.html namespace (many fns) • https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/parse-longhttps://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/parse-doublehttps://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/parse-booleanhttps://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/parse-uuidhttps://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/NaN?https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/infinite?https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/random-uuid#2021-11-2322:08seancorfieldLooking forward to retiring some of our conversion/parsing functions in favor of these new built-in ones!#2021-11-2403:01Vincent CantinThe parse functions are right on time for this year's Advent of Code 💯#2021-11-2403:06seancorfield@U8MJBRSR5 How do those make it easier? You can mostly just call the parse* JVM functions. A bit more effort since you'd need try/`catch` but it doesn't make anything completely new possible, just more convenient.#2021-11-2403:30Vincent CantinSame as what you mentioned, I am looking forward to retire https://github.com/green-coder/advent-of-code-2020/blob/master/src/aoc/util.clj#L22-L29.#2021-11-2403:39seancorfieldThat function isn't the same at all:
user=> (parse-long "\n 18 15 \n")
nil
user=> (parse-long "\n \"18\" 15 \n")
nil
user=> (require '[clojure.edn :as edn])
nil
user=> (edn/read-string "\n 18 15 \n")
18
user=> (edn/read-string "\n \"18\" 15 \n")
"18"
user=>
#2021-11-2403:54Vincent CantinYes, I know.#2021-11-2411:18imreSome functions in the math namespace result in reflection warnings:
Loading /Users/ikoszo/.m2/repository/org/clojure/clojure/1.11.0-alpha3/clojure-1.11.0-alpha3.jar!/clojure/java/math.clj... 
Reflection warning, /Users/ikoszo/.m2/repository/org/clojure/clojure/1.11.0-alpha3/clojure-1.11.0-alpha3.jar!/clojure/java/math.clj:362:3 - call to static method abs on java.lang.Math can't be resolved (argument types: unknown).
Reflection warning, /Users/ikoszo/.m2/repository/org/clojure/clojure/1.11.0-alpha3/clojure-1.11.0-alpha3.jar!/clojure/java/math.clj:373:3 - call to static method max on java.lang.Math can't be resolved (argument types: unknown, unknown).
Reflection warning, /Users/ikoszo/.m2/repository/org/clojure/clojure/1.11.0-alpha3/clojure-1.11.0-alpha3.jar!/clojure/java/math.clj:384:3 - call to static method min on java.lang.Math can't be resolved (argument types: unknown, unknown).
Reflection warning, /Users/ikoszo/.m2/repository/org/clojure/clojure/1.11.0-alpha3/clojure-1.11.0-alpha3.jar!/clojure/java/math.clj:556:3 - call to static method scalb on java.lang.Math can't be resolved (argument types: double, unknown).
Loaded
Is this by design?
#2021-11-2411:19imreWe had this with Math/abs previously and ended up using clojure.math.numeric-tower/abs instead.#2021-11-2411:20imre(in cases where we couldn't type-hint the call due to having to handle both long and double)#2021-11-2412:09orestisWoo I originally suggested convenience number parsing specifically for advent of code :smiling_face_with_3_hearts:#2021-11-2413:23Alex Miller (Clojure team)@U08BJGV6E no - how are you seeing that?#2021-11-2413:24imre(set! *warn-on-reflection* true), then load the clojure.java.math ns into the repl#2021-11-2413:26Alex Miller (Clojure team)Hrm#2021-11-2413:26borkdudecan't repro.
$ clj
Clojure 1.11.0-alpha3
user=> (set! *warn-on-reflection* true)
true
user=> (require 'clojure.java.math)
nil
Perhaps you're using java 17?
#2021-11-2413:26imrerequire won't reload an already loaded ns#2021-11-2413:26imreI went to the actual ns file and did a load to repl editor command#2021-11-2413:27borkdude
user=> (require 'clojure.java.math :reload)
nil
#2021-11-2413:27imreI haven't tried but I'm assuming re-evaluating those fns one by one would result in the same#2021-11-2413:27imrehmm#2021-11-2413:27Alex Miller (Clojure team)I don't see why#2021-11-2413:28borkdudeWhat Java version are you using#2021-11-2413:28imre17#2021-11-2413:28imrelet me try on 11#2021-11-2413:28borkdudeI also can't repro with Java 17 but I have seen one reflection issue before when upgrading when another same-arity/different-type overload got added.#2021-11-2413:33imre
Clojure 1.11.0-alpha3
user=> (set! *warn-on-reflection* true)
true
user=> (ns
  ^{:author "Alex Miller",
    :doc "Clojure wrapper functions for java.lang.Math static methods.

  Function calls are inlined for performance, and type hinted for primitive
  long or double parameters where appropriate. In general, Math methods are
  optimized for performance and have bounds for error tolerance. If
  greater precision is needed, use java.lang.StrictMath directly instead.

  For more complete information, see:
  "}
  clojure.java.math
  (:refer-clojure :exclude [min max]))
nil
clojure.java.math=> (defn abs
  {:doc "Returns the absolute value of a (long or double).
  If not negative, a is returned, else negation of a is returned.
  If a is Long/MIN_VALUE => Long/MIN_VALUE
  If a is a double and zero => +0.0
  If a is a double and ##Inf or ##-Inf => ##Inf
  If a is a double and ##NaN => ##NaN
  See: "
   :inline-arities #{1}
   :inline (fn [a] `(Math/abs ~a))
   :added "1.11"}
  [a]
  (Math/abs a))
Reflection warning, /Users/ikoszo/Library/Application Support/JetBrains/IdeaIC2021.3/scratches/math.clj:362:3 - call to static method abs on java.lang.Math can't be resolved (argument types: unknown).
#'clojure.java.math/abs
clojure.java.math=> 
on java 11
#2021-11-2413:34imreI can see why this could happen - inside the abs fn, there is no information about a that could help the compiler choose the right method to call#2021-11-2413:36borkdudeyep, that reproduces it for me#2021-11-2413:37imreIf I open the ns in Cursive, it will highlight this#2021-11-2413:37imreDue to our previous adventure with abs I was really interested how this would be solved in the new ns, which is why I started poking around#2021-11-2413:39borkdudeIt's the same thing some array based function in clojure.lang.RT, you can't really avoid reflection here unless you enumerate all possible input types and make special cases for them#2021-11-2413:39borkdudebut then you're basically already doing the reflection yourself#2021-11-2413:42imreWell, I don't have a solution, but it was surprising to see a reflection warning from a core ns. And according to Alex it wasn't intentional#2021-11-2413:46Alex Miller (Clojure team)This call is inlined, so it doesn't actually matter#2021-11-2413:47borkdudeunless you're using it as a higher order function for example#2021-11-2413:47borkdudebut then you can still add a type hint in the surrounding code#2021-11-2413:48imreWhile I'm not familiar with the concept of inlining in clojure, wouldn't it still result in reflection use when invoking (Math/abs a)?#2021-11-2413:48borkdudeNot if you do: (let [a 1] (Math/abs a))#2021-11-2413:48borkdudesince the type of a is known in that context#2021-11-2413:49imreWhat if the only thing I know about a is that it's a number?#2021-11-2413:49borkdude
clojure.java.math=> (let [a 1] (abs a))
1
clojure.java.math=> (defn foo [a] (abs a))
Reflection warning, NO_SOURCE_PATH:1:15 - call to static method abs on java.lang.Math can't be resolved (argument types: unknown).
#'clojure.java.math/foo
#2021-11-2413:49borkdudeThen the compiler doesn't have enough information to select the method#2021-11-2413:52imreI wonder if using https://github.com/clojure/math.numeric-tower/blob/master/src/main/clojure/clojure/math/numeric_tower.clj#L104 keeps being superior in those cases?#2021-11-2413:53borkdudeOne could also wonder what (clojure.java.math/abs 1) gives over (Math/abs 1), I mean, it's not like the interop was hard to type?#2021-11-2413:57borkdudeAt least we get auto-complete for those functions in editors that have not so good Java support ;)#2021-11-2413:58imreI'd consider it a good value add if clojure.java.math could solve those reflection warnings 🙂#2021-11-2414:02Alex Miller (Clojure team)As has been discussed in #clojure-dev and the ticket, discoverability and avoiding interop were motivations#2021-11-2414:03Alex Miller (Clojure team)The numeric-tower impl relies on multimethods and boxing and other stuff that are not a good base for performance#2021-11-2414:04borkdudeGood points. Making these wrappers also helps beginners that are not so familiar with the JVM (discoverability)#2021-11-2414:04imreah, thanks for the pointer, I see there's a very similar discussion happening there#2021-11-2414:05imreWould it make sense though to point out in the docstrings that reflection warnings are somewhat expected for these fns?#2021-11-2414:07borkdudeI think making it clojure.math and the same in CLJS would help discoverability and beginners even more. So :thumbsup: from me so far on that idea.#2021-11-2400:01Lukas DomagalaTiny new library to macroexpand-all from clojurescript code https://github.com/Cyrik/cljs-macroexpand#2021-11-2411:50flowthingTutkain 0.11.0 (alpha), a Clojure plugin targeting the socket REPL for Sublime Text, is out. Change log: https://github.com/eerohele/Tutkain/blob/6919e340a767c0b54bb8fe3629cdb205da9351f7/CHANGELOG.md#0110-alpha---2021-11-23#2021-11-2413:17amarhttps://github.com/xfthhxk/unminify: unminifies JS stacktraces * CLI can now be installed via npm * Configurable Docker https://hub.docker.com/repository/docker/xfthhxk/unminify targeted at Google Cloud Platform - Exposes an endpoint to accept JS error info - Uses source map to unminify stacktrace and write to Error Reporting#2021-11-2416:32timo#2021-11-2522:57Lukas Domagalaomni-trace v0.2.0 released, now with zoomable/pannable flamegraphs and better cljs file handling https://github.com/Cyrik/omni-trace#2021-11-2616:32jerger_at_ddaWe just released our new c4k-nextcloud module with proud. c4k-nextcloud is intended for small nextcloud installations on a cheap single node k8s cluster. We use this setup in production, backup is included, your stars will be in favor 🙂 https://gitlab.com/domaindrivenarchitecture/c4k-nextcloud #clojure #k8s #devops #nextcloud#2021-11-2720:04lreadhttps://github.com/lread/test-doc-blocks v1.0.166-alpha - Test AsciiDoc and CommonMark code blocks found in articles and docstrings • Added traditional main invocation as an alternative to -X invocation for more a more general purpose entry point • See https://github.com/lread/test-doc-blocks/blob/main/CHANGELOG.adoc#v10166-alpha for details and other changes • Drop by in #test-doc-blocks should you want to chat!#2021-11-2720:10Cora (she/her)ooooh very cool!#2021-11-2720:11seancorfieldHoneySQL uses this so that all the documentation is tested!#2021-11-2720:11Cora (she/her)this might deserve to be in the alternatives section? https://github.com/hyperfiddle/rcf#2021-11-2720:13lreadYeah, certainly related @U02N27RK69K, thanks!#2021-11-2720:13Cora (she/her)👍👍👍#2021-11-2720:14dominicmThere's been a few updates to https://github.com/juxt/clip, we're now on 0.26.0. This release marks the end of my worries that Clip will have any major breaking changes, I believe it is now very close to outgrowing its alpha status. Clip is a dependency injection library similar to Integrant and Component. Its aim is to "clip on" to your existing program without requiring multi-methods or protocols. The rationale in the README explains this in a lot of detail. Changes in the last few releases: • BREAKING: symbols are no longer resolved to functions for :executor and :deref, you now need to call juxt.clip.edn/load manually • AOT ◦ There's a new require function which will require the namespaces for a system to start or stop ◦ I'm aiming for Clip to work inside GraalVM, but I haven't yet given this a go. Please let me know. • Testing ◦ You can now start a subset of a system, so you can start a handler and its dependencies ◦ You can select a subset of a system, and perform any operation on that (like select-keys for a system) ◦ There's a new macro with-system which will run a code block with a system started and attempt to clean it up afterwards • :resolve is now only called once, rather than on every reference • Documentation got a makeover In the future, I'd like to look at opening up the operations on a system to user customization. I'm no longer interested in suspend/resume, but I'd like to allow that to be implemented in user space. I'd also like to continue the work I did on "indirect linking," which allows you to re-eval a ring handler and not need to restart your system.#2021-11-2800:11seancorfieldhttps://github.com/seancorfield/honeysql 2.1.829 -- Turn Clojure data structures into SQL -- bug fixes for :not and :nest; enhancements for :add-column and :drop-column; various doc/build/test enhancements too (including automatically building, testing, and releasing to Clojars when a new release is created on GitHub)#2021-11-2813:54borkdudetools-deps-native 0.0.5 is out which can be used as a pod with #babashka Run tools-deps-alpha as a native binary. https://github.com/babashka/tools-deps-native/releases/tag/v0.0.4 New: • Windows support • Available in the pod registry Example usage as pod:
(require '[babashka.pods :as pods])

(pods/load-pod 'org.babashka/tools-deps-native "0.0.5")

(require '[clojure.tools.deps.alpha :as tda])

(->> (tda/create-basis {:project "deps.edn"
                        :extra '{:deps {buddy/buddy-core {:mvn/version "1.10.1"}}}})
     :classpath-roots
     (take 2))

;;=> ("src" "/Users/borkdude/.m2/repository/buddy/buddy-core/1.10.1/buddy-core-1.10.1.jar")
You can also use it with tools.bbuild which is designed to work with tools-deps-native. https://github.com/babashka/tools.bbuild Use with caution as these projects are still marked as experimental, although all tools.build tests pass. Join #babashka for discussion.
#2021-11-2820:22borkdudeA new version of babashka/fs : file system util library (mostly based on java.nio). https://github.com/babashka/fs/blob/master/CHANGELOG.md v0.1.2 • Add `with-temp-dir` macro https://github.com/babashka/fs/issues/37 (https://github.com/hugoduncan) • Add `fs/home` and `fs/expand-home` https://github.com/babashka/fs/issues/12 https://github.com/babashka/fs/issues/13 (https://github.com/Kineolyan) • Improve `which` on Windows: take into account `.com`, `.exe`, `.bat.`, `.cmd` when searching for program v0.1.1 • Allow raw pattern to be passed to `fs/match` https://github.com/babashka/fs/issues/32unzip: entry in dir can come before dir in zip entries https://github.com/babashka/fs/issues/35#2021-11-2911:25borkdude#babashka 0.6.6 (2021-11-29) Summary changelog: • Resolve program in `babashka.process` on Windows using known extensions. This means you can now invoke `(shell "yarn")` and it will work on both Unix-like systems and Windows. • Add `babashka.core` namespace with `windows?` predicate. • Add `fs/with-temp-dir` to `babashka.fs` (https://github.com/hugoduncan) • Add `fs/home` and `fs/expand-home` to `babashka.fs` (https://github.com/Kineolyan) • Add classes to support running the https://github.com/cgrand/xforms library from source: • babashka.curl: support `:as :bytes` option to download binary file • Add compatibility with https://github.com/gnarroway/hato and https://github.com/clj-commons/clj-http-lite insecure feature by adding classes • clojure.core/read improvements: support `:eof` + `:read-cond` • Add support `*read-eval*`, `*default-reader-fn*` and `*reader-resolver*` dynamic vars to be used with `clojure.core/read`. • Add `SQLITE` feature flag (https://github.com/nikvdp) See full changelog here: https://github.com/babashka/babashka/blob/master/CHANGELOG.md#2021-11-2914:49Noah BogartThank you for babashka.fs. it’s the best file system library in clojure.#2021-11-2918:13Lukas Domagalav0.2.2 of https://github.com/Cyrik/omni-trace: added automated deeptracing for clojure and clojurescript
(require '[cyrik.omni-trace :as o])

;; uncomment to also trace clojure.core, tested with testing-ns only
;; (require '[cyrik.omni-trace.instrument :as i])
;; (reset! i/ns-blacklist [])
(o/run-traced 'cyrik.omni-trace.testing-ns/run-machine)

;; run this for cljs
;; (o/run-traced-cljs 'cyrik.omni-trace.testing-ns/run-machine)
(tap> (o/rooted-flamegraph 'cyrik.omni-trace.testing-ns/run-machine))
next will either be better portal or better editor integration, wish me luck
#2021-11-2921:44Daniel SlutskyNotespace, a tool for seeing your namespace in a notebook, is gradually maturing in its current form, the so-called Notespace v4 (alpha). This short video overviews its current main ideas and features: https://youtu.be/uICA2SDa-ws Many thanks to the friends at Scicloj for testing it and brainstorming about it.#2021-11-3010:49Lukas Domagala@U066L8B18 looks great. I’d love to hear a little more on the differences to tools in the same space, especially clerk. the other thing I’m interested in is how notebook allows new views to be defined that have user-space defined interactions, but I guess that should happen in a different thread.#2021-11-3010:55Daniel SlutskyThanks, @U02EMBDU2JU, good questions. One good place to discuss it is the notespace topic thread at the data-science Zulip stream: https://clojurians.zulipchat.com/#narrow/stream/151924-data-science/topic/notespace We are planning to have a session about these topics at the coming Clojure Data Science day. https://clojureverse.org/t/re-clojure-data-science-special-dec-5th-2021/#2021-11-3007:12robert-stuttafordNot sure if this is appropriate to ask of all of you, but I figure, what the heck, exposure could only help our cause 😁 RTs welcome! https://twitter.com/RobStuttaford/status/1465577349018226688#2021-11-3007:42borkdudeRetweeted. Hope more people will follow.#2021-11-3022:53Jacob RosenzweigWhat happens when the pro trial is lost? Does the entire slack get shut down?#2021-11-3022:57borkdudeNo, it will become as before, just no history#2021-12-0107:27mbjarlandBack a few years ago I actually contacted slack with this exact question about open source non-profit communities and clojurians specifically. Response was essentially “we don’t give a crap”…so yeah…#2021-12-0107:32mbjarlandquoting part of the response in 2018: > … That said, while we’ve has some interest in a version of “community paid plans” at present we have no plans to change our pricing levels. but who knows…might be worth pinging them again. Back then they did have a non-profit plan which gave a 85% discount (still too expensive) but a community like ours did not meet the criteria at the time. I’ll probably reach out to them again and see if that answer is still valid.#2021-12-0107:36pezThe bet here is that they will just let us be on the Pro plan w/o charging at all.#2021-12-0107:38robert-stuttafordthe actual Slack CEO is looking into it at the moment 😄#2021-12-0107:39mbjarlandI suspect we will either have to actively cancel or we get a bill for 100k or whatever the monthly is…I’m on a chat with them now to ask#2021-12-0107:40robert-stuttaford@U4VDXB2TU, the Slack CEO responded to my tweet, he's looking into it!#2021-12-0107:40robert-stuttafordhttps://twitter.com/stewart/status/1465938156977463301#2021-12-0107:41mbjarlandnice! ok I’ll shut down my grunt level communications channel then : )#2021-12-0107:42robert-stuttaford😄 😄#2021-12-0107:52mbjarlandI’m having twitter issues…but might be good if as many as possible could go hit like on that reply from the slack ceo#2021-12-0107:53mbjarlandas an indication of interest#2021-12-0119:48Jacob RosenzweigHey, if stewart wants to keep this slack alive, I'm all for it. I really like the app but their sales strategy kills non-profit use.#2021-12-0119:49Jacob RosenzweigThey should make it easier for non-profit communities to use it. That's how you keep general public interest in the product alive.#2021-12-0105:04tony.kayGuardrails 1.1.9 released to clojars. This release includes clj-kondo configuration for improved source-level checking, thanks to @mroerni https://github.com/fulcrologic/guardrails#2021-12-0105:08tony.kayFulcro RAD 1.1.0-RC8 Released. This release modifies the provided network request transform to make things work better with Pathom 2 and 3 out of the box. https://github.com/fulcrologic/fulcro-rad#2021-12-0106:58robert-stuttafordhttps://twitter.com/stewart/status/1465938156977463301 holding thumbs, folks!#2021-12-0112:45Alex Miller (Clojure team)If it would help to connect to Nubank somehow (we have a large corporate Slack account), I'm happy to try to find the right connnection#2021-12-0112:45borkdudePerhaps it would help if you replied to that tweet directly with this info?#2021-12-0114:23robert-stuttafordthanks Alex! let's see what my new pal Stewart cooks up, first 😁#2021-12-0114:21plexusNew releases of Witchcraft (https://github.com/lambdaisland/witchcraft) and Witchcraft-plugin (https://github.com/lambdaisland/witchcraft-plugin). Plug your REPL into Minecraft and go! This makes things compatible with Minecraft 1.18 which came out yesterday.#2021-12-0114:21plexusDemonstration: https://www.youtube.com/watch?v=ZP4KEPziObA#2021-12-0114:28Noah Bogartthis is cool as hell!#2021-12-0114:30plexusCome hang out in #minecraft or join the lambda island discord if you want to find fellow witchcrafters https://discord.gg/pCuZBDRruW#2021-12-0114:34ericdalloclojure-lsp New https://clojure-lsp.io/ version released: https://github.com/clojure-lsp/clojure-lsp/releases/tag/2021.12.01-12.28.16 🚀 A lot of new features and improvements, the main highlights are: • Stub generation using new https://github.com/clj-easy/stub library, making it possible to clojure-lsp know about closed source libraries, like for example, datomic.api • Check the gif of one of the new code actions: Sort map This release was supported by https://www.clojuriststogether.org/ clojurists-together 💜 clojure-lsp For more information, check #lsp#2021-12-0114:37robert-stuttafordmusical!#2021-12-0207:09StefanThis also includes the fix for poly / mono repos right? That’s also definitely noteworthy :)#2021-12-0207:11robert-stuttafordyeah that's actually pretty huge!#2021-12-0115:54Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.1040 is now available • Add clj -X:deps list for listing the full transitive set of deps and license info - see https://clojure.github.io/tools.deps.alpha/clojure.tools.cli.api-api.html#clojure.tools.cli.api/list • Improved error handling for unknown tool with -T or -X:deps find-versions • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1084#2021-12-0115:55Alex Miller (Clojure team)Example output from core.async#2021-12-0115:56Alex Miller (Clojure team)This list function is still a wip, so happy for any feedback if you see anything wonky#2021-12-0116:08robert-stuttafordlist is really useful, thank you for this!#2021-12-0116:20Alex Miller (Clojure team)🙇#2021-12-0116:29pezDo I understand correctly that this calls for an update of this answer? https://ask.clojure.org/index.php/11268/tools-deps-how-list-dependencies-and-their-versions-from-repl#2021-12-0116:40Alex Miller (Clojure team)not really, that's asking about doing it at the repl#2021-12-0116:45pezYeah, I remember now that that was important for what I was doing then… 😃#2021-12-0116:47Alex Miller (Clojure team)there will in the future be better ways to answer that question too, but this isn't it :)#2021-12-0116:51pezSounds great!#2021-12-0116:53pezWe had a question in #calva about how to list all namespaces, also from transitive deps. Maybe those future better ways will make that easier?#2021-12-0121:15Lukas Domagala@U0ETXRFEW can't you already get that info from clj-kondo? It's running in lsp anyway and lsp is dumping that info to disk on startup#2021-12-0121:20slipsetThere is a lein plugin that does the license thing and it allows for export to edn and csv. The latter was really useful once as I could just use that to send off a excel file to a PHB.#2021-12-0121:30pez@U02EMBDU2JU this was also a thing to do from the REPL. But, yes, in a Calva context it might work. #2021-12-0123:23Alex Miller (Clojure team)@U04V5VAUN the -X:deps list above has a :format :edn export option#2021-12-0217:26dominicmDoes the license code only work for maven right now?#2021-12-0217:26dominicmI can't see an impl for, e.g. deps.edn#2021-12-0217:30Alex Miller (Clojure team)no, will not yet work for git or local deps projects#2021-12-0217:31Alex Miller (Clojure team)that is pending some more design work#2021-12-0217:31dominicmhttps://github.com/licensee/licensee ported to clojure? 😄#2021-12-0217:33Alex Miller (Clojure team)planning to avoid needing something like that :)#2021-12-0116:18pezCalva v2.0.227 just out. It contains a fix for finding test symbols with + (and other regex special characters) in them, signed @marc-omorain. Thanks! ❤️ It also contains the fruits of my rather heavy labour of the last month or so, trying to convince VS Code that it can do Parinfer. https://calva.io/parinfer/ It is disabled by default and considered experimental. As part of it, there is a new “aggressive” format-as-you-type setting which is part of Parinfer mode, but it can be used separately. It is also considered experimental and disabled by default. See https://calva.io/formatting/#configuration for how to enable.#2021-12-0116:20robert-stuttafordheck, great job wrestling that pig, @U0ETXRFEW!#2021-12-0116:20pezA note about Calva’s take on Parinfer, that might be of extra importance: It is designed to be used together with Calva Paredit.#2021-12-0116:21pezIf someone wants to read about some of the pig wrestling: https://twitter.com/pappapez/status/1461018167002734592#2021-12-0212:34pezThe wrestling continues: https://twitter.com/pappapez/status/1466371655840763911?s=20 > TL;DR: Version .228 replaces .227, keeping the non-Parinfer-experiment improvements, but removing the experiment. There was a worrying error report in the #calva channel, and I decided that asking people to please stay on .227 has to suffice for now. Please stay on .227 unless you see experience blocking issues that you think has to do with the experiment code. And if you run into such problems, please report in #calva or on Github. I need clues!#2021-12-0117:57delaguardohttps://github.com/DeLaGuardo/setup-clojure new release of setup-clojure GitHub action. • Use install-linux.sh script for Ubuntu and MacOS • Use action version as a part of cache key#2021-12-0119:51borkdudeWith all those beautiful releases today, I cannot stay behind! clj-kondo clj-kondo 2021.12.01 • Improve linting in `extend-protocol`, `extend-type`, `reify`, `specify!` https://github.com/clj-kondo/clj-kondo/issues/1333, https://github.com/clj-kondo/clj-kondo/issues/1447 • Support `:context` in nodes in hooks for adding context to analysis https://github.com/clj-kondo/clj-kondo/issues/1211goog.object, `goog.string` etc must be required before use in newer releases of CLJS https://github.com/clj-kondo/clj-kondo/issues/1422 • Resume linting after invalid keyword https://github.com/clj-kondo/clj-kondo/issues/1451 • Fix install script for relative dir opts https://github.com/clj-kondo/clj-kondo/issues/1444 • Fix type mismatch error with auto-qualified keyword https://github.com/clj-kondo/clj-kondo/issues/1467 • String type hint causes false error report https://github.com/clj-kondo/clj-kondo/issues/1455 • Fix false positive with cljs/specify! https://github.com/clj-kondo/clj-kondo/issues/1450 • Improve analysis for ns-modifying destructuring key https://github.com/clj-kondo/clj-kondo/issues/1441 • CLJS `(exists? foo.bar/az)` complains about require https://github.com/clj-kondo/clj-kondo/issues/1472 clj-kondo 2021.12.16 A pretty big release with several new linters, options and improvements! New • Automatically load configurations from `.clj-kondo///config.edn`. This can be disabled with `:auto-load-configs false`. https://github.com/clj-kondo/clj-kondo/issues/1492 • Add linter `:duplicate-case-test-constant`: detect duplicate case test constants. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#duplicate-case-test-constanthttps://github.com/clj-kondo/clj-kondo/issues/587 (https://github.com/mknoszlig) • Add linter `:unexpected-recur`: warn on `recur` in unexpected (non-tail) position. https://github.com/clj-kondo/clj-kondo/issues/1126 • Add linter `:used-underscored-binding`: warn on used bindings that start with underscore. Disabled by default. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#used-underscored-bindingshttps://github.com/clj-kondo/clj-kondo/issues/1149 (https://github.com/mknoszlig) • Add linter `:docstring-blank` for checking empty docstring. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#docstring-blankhttps://github.com/clj-kondo/clj-kondo/issues/805 (https://github.com/joodie) • Add linter `:docstring-leading-trailing-whitespace` for checking leading and trailing whitespace in docstring. Disabled by default. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#docstring-leading-trailing-whitespacehttps://github.com/clj-kondo/clj-kondo/issues/805 (https://github.com/joodie) • Add linter `:docstring-no-summary` for checking the absence of summary of args in docstring. Disabled by default. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#docstring-no-summaryhttps://github.com/clj-kondo/clj-kondo/issues/805 (https://github.com/joodie) • Add `:exclude-defmulti-args` option for `:unused-bindings` linter. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.mdhttps://github.com/clj-kondo/clj-kondo/issues/1188 (https://github.com/mknoszlig) • Support `:config-in-comment` https://github.com/clj-kondo/clj-kondo/issues/1473. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#override-config-in-comment-forms. Enhanced • Bump built-in cache for clojure 1.11.0-alpha3 and `clojure.data.json` • Reword `:refer` suggestion so you can copy paste it https://github.com/clj-kondo/clj-kondo/issues/1293 (https://github.com/vemv) • Add re-frame analysis output https://github.com/clj-kondo/clj-kondo/issues/1465 (https://github.com/benedekfazekas) • Qualified map causes too many arguments in type checker https://github.com/clj-kondo/clj-kondo/issues/1474 • Handle reader conditional with unknown language https://github.com/clj-kondo/clj-kondo/issues/970 #2021-12-0119:57pezHaha, you are not allowing us to keep up the slightest!#2021-12-0122:43lreadThere’s no sense in even trying to keep up with the borkdudes! simple_smile#2021-12-0217:35msolliNew version of https://github.com/msolli/proletarian, a durable job queuing and worker system for Clojure backed by PostgreSQL: https://github.com/msolli/proletarian/blob/main/CHANGELOG.md#1054-alpha---2021-12-02 This version features some improvements with how certain exceptions are handled, as well as some API polish. There is one breaking change in that regard: The retry-strategymultimethod has been replaced by a :proletarian/retry-strategy-fn option for proletarian.worker/create-queue-worker . Follow-up in #proletarian.#2021-12-0219:17robert-stuttafordgood news, everyone: Slack has sponsored a Pro account for this fine community :-)#2021-12-0219:24wilkerlucioawesome!! really happy for this 😄#2021-12-0219:24wilkerluciothank you @U0509NKGK for pushing on this: https://twitter.com/RobStuttaford/status/1465577349018226688 🙏#2021-12-0219:27seancorfieldNote: it is for one year only -- we have to reapply each year (which we shall do).#2021-12-0219:30borkdude🙏 🙏 🙏#2021-12-0219:30athomasoriginalThis is huge! Just last night I had a Q and I knew it would have been asked in Clojurians…3 pages deep I found it! Blessings 🙏#2021-12-0219:31colinkahnNice!#2021-12-0219:31jjttjjAmazing!#2021-12-0219:41tolitius@U0509NKGK ❤️#2021-12-0219:43noogajust saw this on twitter, amazing!#2021-12-0220:06eggsyntaxShe's not a Clojurian so may never see this, but public thanks to Kiere Shaffer from the Asheville dev community, who clued us in that tweeting directly at the Slack CEO had worked for another large community she's part of. 🙏#2021-12-0221:46just.sultanov@U0509NKGK amazing!!! 💪 thank you a lot#2021-12-0315:36mbjarlandWow. Did not expect this outcome. Awesome job @U0509NKGK ! This has been a long time coming. As a side note, here is the grunt-level response I received today from slack support:
If your question is about pricing for community teams then I'm so sorry but the answer would still be the same as when you last chatted to us. There is currently no pricing plans that differ from our business plans for community workspaces.
: ) +1 for skipping up the org chart to the absolute top @U0509NKGK :punch:
#2021-12-0316:17robert-stuttafordhigh five!#2021-12-0316:59Thomas TayAwesome! This is great news#2021-12-0220:40vlaaadreveal https://vlaaad.github.io/reveal/ v1.3.250 and https://vlaaad.github.io/reveal-pro v1.3.293 are released! This release brings a bunch of improvements to how you can interact with Reveal from your IDE, which unlocks a "sticker overlay" development workflow that is described in this introductory blog post: https://vlaaad.github.io/reveal-stickers Follow up in this thread or in #reveal!#2021-12-0220:40vlaaadI'm curious to know what you think!#2021-12-0220:49phronmophobicthe sticker idea looks really neat! here's a few thoughts: • for me, the caption is covered up by the player video controls • the text in the videos is really small and hard to read unless I zoom in or go full screen • when I first saw the custom stickers example, I thought it would take the comment block: (start!), (slurp) (stop) and automatically turn that into a UI. That might be a cool idea!#2021-12-0220:52Lukas DomagalaThat looks really awesome, love the idea! This looks like the killer feature that will make me start using reveal#2021-12-0220:55Lukas DomagalaHaven't even tried it yet, but I'm already thinking that a per project setting that restarts the same stickers of the last session would save a lot of time arranging them in the right spots#2021-12-0220:55vlaaad@U7RJTCH6J thank for the feedback! I'll try to improve video captions!#2021-12-0220:56phronmophobicwhat do you use for video editing?#2021-12-0220:56vlaaad"ScreenToGif" windows app#2021-12-0220:57phronmophobicah ok. I have some improvements in mind for my ffmpeg wrapper, so I'm curious what people are currently using.#2021-12-0220:58phronmophobicScreenToGif looks really solid#2021-12-0221:00vlaaad@U02EMBDU2JU thanks! I thought about automatically restored stickers. There are some problems with them that I couldn't solve yet — they accept any object in the JVM as an argument. It might be impossible to reconstruct these objects between JVM runs. For example, at the first JVM run you start a sticker that shows the status of database connection. Then you remove SQL dependency from the app and restart the JVM — how should Reveal behave?#2021-12-0221:05djblueReveal stickers look very slick! 🙌#2021-12-0221:43Lukas Domagala@U47G49KHQ I haven’t looked at the way you do your data connection, but I’m thinking stickers would be the most useful when watching an atom or a var. So reveal would restart with a “watch” of some kind for that var in that name space. If it never shows up again the user can always close that sticker. I’m thinking of re-frame apps that would want to watch the db atom or like you said, a db connection or even an “in function” def for debugging. if i just tap a map into it it’s probably not as interesting to see the same data on the second run, but who knows, the user can always close it.#2021-12-0319:06robert-stuttafordhttps://twitter.com/stewart/status/1466843623266283521#2021-12-0403:00just.sultanovI just published the first release of xtdb-tarantool. XTDB module which allows you to use Tarantool (in-memory computing platform). https://github.com/sultanov-team/xtdb-tarantool#2021-12-0413:38refsetCool, congratulations! 🙂 I was ~unaware of Tarantool until you posted this, but it looks like a fascinating alternative to Redis & much more. As far as the integration with XT, I am excited by your roadmap on the readme: > ✓ Add tx-log > ❏ Add kv-store > ❏ Add document-store#2021-12-0413:39refsetI'm somewhat surprised nobody has implemented RESP-compatibility for Tarantool yet, to attract more attention from Redis users (or at least I can't find such a thing). This brief comparison between Redis and Tarantool was helpful for me as the main docs are huge https://stackoverflow.com/questions/67481042/when-to-redis-when-to-tarantool#2021-12-0413:46refsetDoes this tx-log implementation already take into account the various WAL / clustering / synchronous transaction (etc.) configurations needed to provide HA & ACID durability for multiple XT nodes? Or are you only able to validate that once you have completed the other items further down in the roadmap (i.e. "Add an example of using a tarantool cartridge", and "Add an example of using a tarantool kubernetes operator (single node / cluster / with sharding")#2021-12-0417:05just.sultanovYes, I will be able to give more information after implementing the basic XTDB API and after developing the Tarantool cluster configuration using the tarantool-cartridge https://www.tarantool.io/en/doc/latest/getting_started/getting_started_cartridge/ In this solution I use the tarantool-cartridge java connector. Some information from the readme:
Java driver for Tarantool Cartridge for Tarantool versions 1.10+ based on the asynchronous Netty framework and official MessagePack serializer. Provides CRUD APIs for seamlessly working with standalone Tarantool servers and clusters managed by Tarantool Cartridge with sharding via vshard.
> Does this tx-log implementation already take into account the various WAL / clustering / synchronous transaction (etc.) configurations needed to provide HA & ACID durability for multiple XT nodes? I tested only in a single node configuration. But I think it should work without any problems in a cluster mode. The current version is an early-early alpha, probably even more like a PoC.
#2021-12-0515:37dominicmhttps://github.com/juxt/pack.alpha has seen a major rewrite today, it's now compatible with tools.build and -T . Pack is a way to convert your deps.edn projects into docker images, Lambda deployment packages, Self executable jars (like uberjars), or "skinny jars" (for libraries or java -cp deployments). This release completely changes the namespaces, coordinate, and removes all the -main s that were previously present. The plan is to re-add new -main in the future on top of the new APIs (contributions welcome!).#2021-12-0515:59Ben Slessa. this is cool, will look for excuse to use it at work b. just came across https://github.com/nanovms/ops, any thoughts on packing a unikernel?#2021-12-0516:01dominicmI haven't investigated unikernels at all. That project is in go, so I don't really have any thoughts about how to utilize it right now, it might work well with the skinnyjar mode though!#2021-12-0516:03Ben SlessJust like Clojure shells out to git, you could shell out to other tools written in less fortunate languages. Question is it's even worth the trouble from your perspective#2021-12-0518:12quollhttps://github.com/quoll/cljs-math is a reimplementation of the new clojure.java.math namespace in pure ClojureScript. This calls into js/Math for a few operations, but because java.lang.Math (and hence clojure.java.math) includes many more functions than are supported in JavaScript, many of the functions had to be implemented from scratch. The namespace is implemented in a .cljc file so that testing can be done in Clojure to compare directly with the equivalent Java functions, but outside of testing it is only useful in ClojureScript.#2021-12-0519:21Noah BogartThis is great! I hope this can be bundled in the clojure math core library instead of as an outside library. #2021-12-0519:37quollIt’s specifically for ClojureScript. It’s only a .cljc file for testing purposes. Once appropriate tests have been set up to compare java.util.Math results to native cljs results, then it will turn back into a .cljs file#2021-12-0519:39quollIt literally duplicates what java.lang.Math does, with some tweaks to make it work in ClojureScript#2021-12-0519:39Noah BogartRight, yes, I mean so clojure core can have built-in support for both clojure and clojurescript #2021-12-0519:41quollI think that the process is to get it accepted into ClojureScript#2021-12-0519:46Cora (she/her)that code is a super interesting read!!#2021-12-0519:56quollI can’t take credit. It’s transliterated from the JDK#2021-12-0519:57quollI just needed to deal with a few things. e.g. unsigned comparisons, and not being able to recast Doubles as ints to read the bits, etc#2021-12-0520:19quollNot being able to add Long values was a problem! I solved that with my own add64 function#2021-12-0520:19quollNot exactly elegant, but it got the job done 🙂#2021-12-0520:36Cora (she/her)well I think it's great, either way. you had to understand the gaps well enough to fill them and it's interesting how they got filled in 😊
#2021-12-0610:39borkdudeA fast way to play with this :)
$ nbb -cp $(clojure -Spath -Sdeps '{:deps {com.github.quoll/cljs-math {:git/tag "v0.0.1" :git/sha "f92217e"}}}')
user=> (require '[cljs.math as m])
nil
user=> (clojure.repl/dir cljs.math)
<<
>>
>>>
E
IEEE-fmod
IEEE-remainder
MAX_FLOAT_VALUE
MIN_FLOAT_VALUE
...
#2021-12-0610:41quollOops. I should have kept <<, >>, and >>> private!#2021-12-0610:42borkdudeAlready won something by posting that then ;)#2021-12-0610:46borkdudeBtw, impressive work!#2021-12-0618:20kingmobManifold 0.2.3 is now out, featuring the new go-off macro, which is based off core.async/go. Also includes a bugfix adding bound-fn for let-flow. Many, many thanks to Ryan Smith (@tanzoniteblack) for adding go-off to Manifold, and to the rest of Yummly for offering it back upstream. https://github.com/clj-commons/manifold/blob/master/CHANGES.md#2021-12-0715:47ikitommi[metosin/malli "0.7.0"] is out! Malli is a data-driven data specification library for Clojure/Script. This release contains the following: • 1-2 orders of magnitude faster Schema creation and transformation • 2 orders of magnitude faster Schema inferring via the new mp/provider • Cached Schema workers (validators, explainers, parsers, generators) for better DX • Alternative cljfx style map-syntax for Schemas via the new SchemaAST protocol • Default Schema registry can be swapped without tears (e.g. JVM-properties or CLJS Compiler options) • Schema provider can infer :maybe and :map-of schemas • Lot’s of bug fixes and small improvements • Some breaking changes in the Extender API, read CHANGELOG for details Thanks for clojurists-together for sponsoring the development of Malli and kudos to all contributors and testers, especially to @ben.sless for some mad perf stuff and reviews. • code: https://github.com/metosin/malli • release post: https://www.metosin.fi/blog/high-performance-schemas-in-clojurescript-with-malli-1-2/#2021-12-0717:18ikitommi[metosin/jsonista "0.3.5"] is out! Jsonista is a Clojure library for fast JSON encoding and decoding. This release updates the Jackson deps and adds support for ContextualDeserializer, making JSON decoding ~30% faster on the https://github.com/metosin/jsonista#performance. Special thanks to Tatu Saloranta (the creator of Jackson) for the help on this 🙇 https://github.com/metosin/jsonista#2021-12-0721:52Janne SauvalaTIL that Jackson was created by a Finn 😮#2021-12-0900:36quollhttps://github.com/quoll/cljs-math 0.1.0 is now out. This includes a full set of generative tests to compare cljs-math implementations on ClojureScript to the equivalent JVM functions, and fixes a few inconsistencies and bugs from 0.0.1. Special thanks to @borkdude for writing the ClojureScript repl access, and to @mfikes for detailed optimization advice. https://github.com/quoll/cljs-math#2021-12-0914:35Alex Miller (Clojure team)would you like to contribute those tests to Clojure? would be happy to add them#2021-12-0915:55quollWell, they test that my implementations of the functions return the same values as the functions in java.lang.Math. (First, by running them on the JVM, and then by running them against a cljs repl). Since Clojure’s implementation is just a wrapper around java.lang.Math then I’m not sure that there’s much to contribute there?#2021-12-0915:56Alex Miller (Clojure team)well, that's why we didn't make them originally, but since you already did, would be happy to add the coverage#2021-12-0915:57Alex Miller (Clojure team)I can do the work to adapt them into the clojure test framework (not that much should be needed)#2021-12-0913:22harryvederciI'm creating a small Clojure dev library to record the inputs and outputs of functions. It does a bunch of spying in functions in other namespaces, so I named it NSA - Namespace Agency 🙂 Old scenario: • You're working on an API. To trigger a certain endpoint you have to execute 10 steps in a UI. • You change some code. You manually execute the UI steps again. Repeat. • At some point, you get tired of this and add a bunch of `(def x x)`  lines to the function, and rerun it from there. New scenario: • You create a spy from the comfort of `<project root>/dev/user.clj` • You execute the UI steps manually, once. The spy records the input and output. • From then on you can: ◦ Get the first/last/nth result of calling the function, without actually calling it. ◦ Rerun the function with the latest input. ◦ Etc (anything you can think of, I guess) It's based on / inspired by  `tortue/spy` Main differences with `tortue/spy`: • It changes the actual function instead of creating a spy that wraps it. • It has one atom containing the calls/responses of all spies, instead of 1 atom per spy. Very very early stage, but feedback is welcome. Also let me know if this already exists. Sauce: https://github.com/harryvederci/nsa#2021-12-0914:03delaguardoThank you! Sounds useful :) You might want to look at https://github.com/clojure/tools.trace Maybe it can be useful for your library#2021-12-0914:05harryvederciWill do, thanks!#2021-12-0914:16Marc O'MorainWe have a similar library named Bond: https://github.com/circleci/bond#2021-12-0914:16Marc O'Morain(require ‘[bond.james :as bond])#2021-12-0916:18kennyAnother similar one: https://github.com/vvvvalvalval/scope-capture.#2021-12-0916:25harryvederciThanks for the suggestions, I'll look into them to see how it fits in. The main value nsa has for me personally is that I don't have to alter a function its code in order to "spy" on its input/output, which keeps the codebase uncluttered. Values within a function can't be spied on with nsa (at least for now), but maybe if that's an issue it's an indicator that my functions are doing too much and that I have to split them up, after which I can unleash nsa on them again 🙂#2021-12-0916:56Jakub Holý (HolyJak)I appreciate the name! Though Bond is also a fine one :)#2021-12-0916:59harryvederciHaha, agreed! Thanks!#2021-12-0917:56metasoarousThis is the content I'm here for#2021-12-1002:05athosAnother similar one: https://github.com/athos/Postmortem nsa’s API looks like a specialized version of instrument in Postmortem.#2021-12-1011:45Lukas Domagalai’m working on something similar: https://github.com/Cyrik/omni-trace you start the spy/trace from the outside and can even capture all outgoing calls from the function and if you want everything inside the function. works for clojurescript as well. oh and you get a pretty flamegraph to view your data. I guess i should extend docs and find a better spy name 😉#2021-12-1011:49harryvederciOof, that inner trace feature looks nice! 👀#2021-12-1011:52Lukas Domagalathe inner trace is 90% debux. i just modified debux to be able to actually save the trace instead of printing and added a way to wrap the debux call around an existing function. there is no visualization for it yet, but you can just look at the output in the instrument/workspace atom. i’d love some more user feedback so if anything is missing i’m open to suggestions#2021-12-1010:20otfrom0-day exploit in the popular Java logging library log4j2 was discovered that results in Remote Code Execution (RCE) by logging a certain string. https://www.lunasec.io/docs/blog/log4j-zero-day/#2021-12-1010:21otfromlots of logging libraries use log4j at the bottom#2021-12-1014:10eggsyntaxGreat choice to post, thank you!#2021-12-1017:55zaneMight even be worth editing the original message to give a summary given how severe this is. People might not click through.#2021-12-1315:11henryw374I bumped log4j2 deps in https://github.com/henryw374/clojure.log4j2 ... not sure if anyone apart from me using it 🙂#2021-12-1014:15Daniel SlutskyThis post suggests some thinking around our community practices, where some common goals could potentially enjoy new community structures. https://clojureverse.org/t/rethinking-community-scope/ It is shared here under #announcements since it is probably the beginning of a new project. Thoughts and comments would help a lot. 🙏#2021-12-1015:32Alex Miller (Clojure team)org.clojure/tools.logging 1.2.1 is now available • tools.logging doesn't actually have a dependency on log4j (you bring your own), but it does use log4j as a test dependency and this bumps all those deps to the new versions#2021-12-1017:19Alex Miller (Clojure team)https://github.com/clojure/tools.namespace 1.2.0 is now available • Fix https://clojure.atlassian.net/browse/TNS-51: Support namespaces as strings in require statements for CLJS (thanks @borkdude!) • Fix https://clojure.atlassian.net/browse/TNS-57: Support :require-macros for CLJS namespaces (thanks @borkdude!)#2021-12-1019:53borkdudeNot a lot of people seem to be aware of this yet, but we also have a #releases channel for minor library updates. Feel free to join if you're interested in receiving those. (cc @seancorfield - perhaps we should mention that channel in the topic of this one?)#2021-12-1020:02quollThanks for this! I often have minor bug fixes that get released, but I don’t think it’s worthy of a post to #announcements. Now I know where to announce them#2021-12-1020:14seancorfieldWe're pretty much at the limit of the topic length already and it's already truncated for smaller screens at Do not cross po...#2021-12-1020:14borkdudetrue#2021-12-1020:15Lukas Domagalamaybe a pinned post then?#2021-12-1020:15borkdudedone#2021-12-1020:18mynomotoThere is description and topic and some of they are redundant atm.#2021-12-1020:20seancorfield@U05094X3J In our experience as Admins, very few people seem to read the description, unfortunately (and a lot of people don't even read the topic!).#2021-12-1020:24mynomotoYeah, that makes sense.#2021-12-1020:39pezGenerally I think we shouldn’t hesitate too much about updating in this channel, #releases is fine and all, but anyway, if there is an update to stuff people use, it is often worth an announcement, imo.#2021-12-1020:41borkdudeBefore we had the "rule" that one shouldn't post too many updates in a row about the same project and that you should wait until the history didn't show the previous announcement anymore. But now we have all history, so I guess that rule has to be slightly changed. The window was a few weeks. Personally I try to stick to 1 update per month about the same project.#2021-12-1020:44pezI always thought that “rule” was shite, tbh.#2021-12-1020:45borkdudeThis rule came into existence because one person complained about too many updates.#2021-12-1020:45borkdudeBut I guess rules can change over time. Perhaps it's good to call them guidelines#2021-12-1020:47mynomotoI like the one per month rule. We are big enough that if people start announcing every update it stops being useful.#2021-12-1020:50pezI'm more like that it is wonderful and beautiful with updates. And that it is more about the update content than the time between them. #2021-12-1020:52seancorfield@U0ETXRFEW We had some very vocal complaints about "Hey, that library has posted five updates in the last month! It's too noisy!" -- hence #releases#2021-12-1020:53seancorfieldSo, yeah, about "once a month" for #announcements unless it's an important, major release (such as a critical security fix, for example).#2021-12-1020:55seancorfieldI think if you have dedicated channels for your projects, it's fine to have every release mentioned in there. Heck, even wire up github to "announce" every commit/PR/whatever in your own project's channel 🙂#2021-12-1021:09pezI remember those complaints. One person. And I totally was thinking the opposite. "Five updates this month! Wow, that is awesome!”#2021-12-1106:54vemvA problem is that for every person having an opinion at all (in either direction) there will be 10, or even 100 which opinions we'll never possibly know of :) Maybe they don't even have a formed opinion, so perhaps one can default to a pessimistic interpretation. As someone who helps out with the maintenance of multiple high-impact clj projects, I can say that user feedback can be hard to gather, so treating attention as a scarce resource most likely helps. (If it doesn't help you, please reflect on the necessities of other projects, and whether a stronger, more diverse community does in fact come out as a result of having a middle ground in place)#2021-12-1107:03seancorfieldRight, which is why we have the "rules" and why #releases exists (and why we're strict about threads in #announcements). Many people do find the "noise" annoying enough to tune out and then the value of those project announcements is just wasted. Information overload is a real problem. As an Admin, I try to stay neutral and will do what I can, with the other Admins, to satisfy the squeakiest wheels without reducing value for others, where we can. As a regular user of Slack, I have #releases muted and check it occasionally but I read everything in #announcements so I want it to have a very high signal-to-noise ratio and seeing repeated announcements from prolific projects is very annoying, even from projects that I use every day (and especially from projects I have zero interest in).#2021-12-1210:45bozhidarnREPL 0.9 is out and it finally brings the long-requested Unix file socket support (and a ton of other small improvements)! Check out the release notes (https://github.com/nrepl/nrepl/releases/tag/0.9.0) and the release blog post (https://metaredux.com/posts/2021/12/12/nrepl-0-9.html) for more details. Enjoy! P.S. CIDER 1.2 is right around the corner. 🙂#2021-12-1210:47borkdudeWhat I am missing in the blog post is why you would use unix domain sockets for nREPL#2021-12-1210:49borkdudeThe issue number in the changelogs associated with this point to a different issue about keyword completions#2021-12-1211:07pezIf we use 0.9 from Calva, will we need to make some other changes or will it use regular TCP sockets?#2021-12-1211:53eval2020@U04V15CAJ I was also looking for this - it’s https://github.com/nrepl/nrepl/pull/204#2021-12-1211:55borkdudeThanks#2021-12-1215:22bozhidarNo one needs to change anything regarding Unix sockets, that's just another option for the people who need it. I mentioned briefly in the blog post that Unix sockets are a bit faster and definitely more secure for local development, which was the reason why we've added support for them. You don't want someone to connect to an unsecured REPL server running on your computer (if you accidentally bound it to a public address).#2021-12-1215:23bozhidar@U0ETXRFEW By default nothing changes, you have to start the server in a different manner for it to use Unix sockets (and clients need to be updated to support them). E.g. instead of a host/port you should just ask for the socket file and setup the connection accordingly.#2021-12-1215:24borkdude@U051BLM8F How do unix sockets make the "port file thing" simpler, as alluded to in the issue/PR?#2021-12-1215:25borkdudeThere is no port file since the unix domain socket file is the file?#2021-12-1215:25borkdudeAnd how does that interplay with jack-in stuff?#2021-12-1215:28bozhidarJack-in knows the filename directly, which makes it trivial to connect to the right socket. With the random port we had to wait until it's known, so that's a small win.#2021-12-1215:29bozhidarRight now jack-in doesn't support Unix sockets, only cider-connect does. (but the necessary changes for jack-in are pretty small)#2021-12-1215:31borkdudehow does cider-connect know what to connect to?#2021-12-1215:42bozhidarYou can connect CIDER by using the local-unix-domain-socket special hostname with cider-connect: M-x cider-connect RET local-unix-domain-socket RET nrepl.sock RET#2021-12-1215:43bozhidarBasically right now you have to pass the socket explicitly.#2021-12-1215:43borkdudeok#2021-12-1215:43bozhidarLater versions might pick up on .sock extension and just offer to connect the socket in the current folder or something along those lines.#2021-12-1215:44bozhidarBtw, thanks for all the feedback! I've fixed the broken link and I added more info about the benefits of using Unix sockets.#2021-12-1212:17borkdudeSCI, a Clojure interpreter suitable for DSLs and scripting, v0.2.8 Full changelogs: https://github.com/babashka/sci/blob/master/CHANGELOG.md#v028
org.babashka/sci {:mvn/version "0.2.8"}
#2021-12-1215:24Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.7.0 16eddbf is now available • write-pom - TBUILD-23 - specify explicit output path with :target • Update to tools.namespace 1.2.0 • Update to tools.deps.alpha 0.12.1090#2021-12-1219:25Eric ScottJust released version 0.1.4 of https://github.com/ont-app/vocabulary. - contains utilities to map between namespaced Clojure keywords and RDF-style URIs. - has support for #lstr "language reader macro. Thanks to Mathieu Lirzin (https://github.com/mthl) for his contribution making the dependencies of this project much lighter-weight.#2021-12-1304:19johnI'm pleased to announce the first general release of a beta for injest - a library for combining transducers with the semantics of thread-last forms. injest lowers the bar to high performance in Clojure and ClojureScript. The initially available features are: • Path Threads: Navigate into data like you would with keywords, but with strings, numbers and functions • Auto Transducification: Automatically turn sequence functions in a thread-last into transducers, comping together contiguous ones • Auto Parallelization: (only in CLJ, not CLJS) In addition to the above, comp parallel transducers into their own function, run on r/fold's fork/join pool • Extension: Add non-core transducers to the injest with reg-xf! and reg-pxf!, for single threaded and parallel transducers, respectively • Profiling: Require in from injest.report.path and get a report showing you a performance comparison of all the macro variants at a given line and column for each call-site at runtime (only in CLJ, not CLJS yet) Thanks to everyone who gave feedback on the road to getting this to beta. https://github.com/johnmn3/injest A short video introduction is available as part of the re:Clojure Data Science Special: https://www.youtube.com/watch?v=GNncKCKHEI4 workshop.#2021-12-1312:42ericdalloReally interesting lib!#2021-12-1312:43ericdalloBTW, Thanks for the clj-kondo/LSP section on readme :)#2021-12-1316:05johnThanks! And thank you for your work on LSP. At some point I'll be hoping to polish that bit up some more and I'd love to rap with you about how LSP works.#2021-12-1316:08ericdalloThank you! Cool, the good news is that next release that whole clj-kondo section would't be necessary anymore :) As @U04V15CAJ implemented auto load configs 🚀#2021-12-1415:08KelvinCool library John! The x>> and =>> macros in particular could be very useful for micro-optimizing codebases with lots of transducer pipelines.#2021-12-1422:23john@U02FU7RMG8M Thanks!#2021-12-1404:58seancorfieldThanks to the prompting of @viebel https://clojure-doc.github.io/ now has Klipse integration and the "Introduction to Clojure" and "Laziness in Clojure" pages now have interactive examples that you can experiment with, in the browser! Contributors are very welcome, please! Follow-up in #clojure-doc#2021-12-1406:44robert-stuttafordNikita @tonsky (of Fira Code and Rum fame) has released a new Sublime Text experience for Clojure. https://tonsky.me/blog/sublime-clojure/ https://github.com/tonsky/sublime-clojure#2021-12-1409:47mkvlrit’s really well done 👏. Sublime 4 is so refreshingly fast that I’m almost reconsidering my current relationship.#2021-12-1409:59henrikSublime has been my go-to text editor of choice since at least 1.0, simply because of its speed. It starts faster than the built-in Notes app on my mac.#2021-12-1415:18athomasoriginalI use vim now, but if I was teaching code (clojure) to someone, I now think I would throw sublime back in the miix#2021-12-1416:18pezLooks super sweet! I love that he makes the case for #nrepl. It is such a wonderful piece of software!#2021-12-1416:33robert-stuttafordso many great options now. it's very different to when I started with slime and swank in '12. what a great community 🙂#2021-12-1416:38flowthing👍:skin-tone-2: For sublimetext ! FWIW, I responded to some of the points regarding Tutkain over at Reddit (https://www.reddit.com/r/Clojure/comments/rflhxf/comment/hoi250s/).#2021-12-1419:29Niki@https://app.slack.com/team/U4ZDX466T thank you for writing this up! What are to-go REPL choices for CLJS today? I’m afraid I’ve been out of touch for too long and they change it again?#2021-12-1506:51flowthing@tonsky I think shadow-cljs is the most popular choice, then Figwheel. Figwheel's nREPL integration is powered by Piggieback, I believe, and shadow-cljs has its own thing. Back when Tutkain targeted nREPL, I tried setting up a ClojureScript REPL using the simplest possible Piggieback configuration and failed to come up with a usable setup. In any case, with Piggieback, you must always first connect to a Clojure REPL before you can turn it into a ClojureScript REPL, which I don't want to do. There are times when I just want to connect to a ClojureScript REPL. I also feel like Piggieback does not offer a particularly beginner-friendly experience, generally speaking. What I'd really like to have is a ClojureScript REPL experience that is as close as possible to the kind of the Clojure REPL experience Tutkain and Sublime Clojure have: tell your editor to connect to a socket port and voilà, you're off to the races. (Of course, with ClojureScript, you also have to spin up a JavaScript runtime and so on, but still). Tutkain actually has that, but it only supports shadow-cljs, sadly. I would really, really like to have a ClojureScript REPL thing that's build tool agnostic, but it is sadly not possible. ClojureScript itself does not have support for an editor-connected socket REPL, and even if it did, simply having shadow-cljs in the classpath would prevent you from using it. All in all, if I were to begin building an editor-connected, build tool agnostic ClojureScript REPL on top of nREPL (with support for symbol info lookups, auto-completion and other runtime querying), I'm not sure where I'd begin. With shadow-cljs, using shadow.remote would be your best bet, but it is obviously shadow-cljs specific. You might be able to build some sort of abstraction that wires up shadow.remote for shadow-cljs and does something else for Figwheel etc., but that'd be quite a bit of work, I think.#2021-12-1506:55flowthingAll that said, I know plenty of folks use nREPL-based ClojureScript REPLs successfully every day, so maybe this is just me being somewhat particular about the whole thing. I guess to me it all just feels way too complicated. 🙂#2021-12-1508:44henrikFrom a UX point of view, I don't really care about connecting to a CLJS REPL directly either. I want to "connect to my project", and somehow have that magically mean that I'm connected both to CLJ and CLJS as necessary, and have things eval in the correct place depending on which file I'm in. This is not trivial, of course, and .cljc makes that ambiguous as well. If I remember correctly, both Proto-REPL and Chlorine handle this pretty well. Our current setup is to start the Shadow server with Integrant, which exposes a socket REPL and an NREPL (so that either can be used, based on editor/preference), then use shadow/repl <build-target> to get to CLJS. Using Shadow gives us access to build control via the REPL, as well as provide a nice dashboard and tap target on port 9630, etc.#2021-12-1509:00flowthing> From a UX point of view, I don't really care about connecting to a CLJS REPL directly either. I want to "connect to my project", and somehow have that magically mean that I'm connected both to CLJ and CLJS as necessary I do care about connecting to a CLJS REPL. There are ClojureScript-only projects, too. And I definitely want no magic. 🙂 I'm with you on the editor having to know whether to evaluate Clojure or ClojureScript, though (which Tutkain does as well: https://tutkain.flowthing.me/dialect.mov).#2021-12-1509:23henrikIf it's a CLJS-only project, then it's obvious that you want to connect to CLJS. I think the point stands. It's not magic (poor word choice), it's just about how closely you can model the intention of the person using the tool.#2021-12-1509:37henrikYou know, "magic", in the sense that things that are frictionless in places where friction usually is encountered can feel like magic. (Until you get acclimated, and then the previous friction spurs anger when it's encountered again. Clojure itself is an example of this with regards to certain aspects)#2021-12-1509:54flowthingRight, I think I understand. Something like that might make sense if it could be neatly composed of existing functionality. But to me, connecting to a Clojure(Script) runtime with Tutkain (or something like Chlorine, I think, although I've only tried it briefly) already has so little friction that I don't see it as a huge priority. Anyway, although I feel like saying more, I'm slightly worried we'd be veering a bit too far off topic. 🙂#2021-12-1419:36Cora (she/her)logback has a new release (1.2.8) that addresses a harder to exploit, yet critical, vulnerability. they're urging users of logback to upgrade asap http://mailman.qos.ch/pipermail/announce/2021/000164.html#2021-12-1419:43Ben SlessThanks for the heads up 👍#2021-12-1419:55vlaaadThanks, although judging by the post the issue is a bit overblown. When attacker has write access to the code (this is where config files are), the system is already compromised enough for this vulnerability to matter IMO#2021-12-1420:03Cora (she/her)something like this allows an attacker to easily establish a remote shell while not disrupting the running services otherwise. it's not overblown, it's just not as trivial to attack as the log4j vulnerability. a lot of hacking is moving horizontally, combining multiple stages of vulnerabilities to establish persistent access. the fewest changes an attacker can make to establish a permanent foothold, the better (for them).#2021-12-1420:05Cora (she/her)and writable configuration files don't necessarily mean writable application files, especially if the vulnerability you're using to rewrite files can only rewrite plaintext#2021-12-1421:21dharriganI tend to concur with Vlad here, the authors in their post of the vunerability have not deemed it as a critical vunerability. It takes an existing compromised system to exploit this one, and whilst there is merit in getting in via the "back door", if you have that level of access to a system running with logback and a writeable file, then you have bigger worries than the one here. Naturally, practicing caution is good and ensuring you update to the latest library is a given, but it doesn't have the same criticality as the log4j exploit.#2021-12-1421:23Cora (she/her)I never said it has the same criticality of the log4j exploit, I even said it was harder to exploit#2021-12-1421:29Cora (she/her)they're urging everyone to update as soon as possible and have ripped out functionality wholesale because it's so dangerous. I guarantee you people taking the OSCP in years to come will be checking for this vulnerability as a relatively easy way to get a reverse shell. it's a big deal. so 1) they want everyone to update as soon as possible, and 2) it's a really big deal. I call it critical and I'm out of line? come on#2021-12-1421:44dharriganThe news item on the logback home page , even says that this exploit and the log4j exploit are "....uttterly different severity levels".#2021-12-1421:49Cora (she/her)yes, I said it was harder to exploit#2021-12-1421:49Cora (she/her)it requires you chain vulnerabilities#2021-12-1421:50Cora (she/her)it still gives you a remote shell and was deemed dangerous enough to rip out wholesale, by the software authors you're pointing to for judgement on how critical the bug is#2021-12-1421:51dharriganRight, totally agree, but in terms of announcing to the community that this is a "critical" update, when no such mention of the word is used, and that it requires chaining of exploits, is I feel unduely panicy.#2021-12-1421:51Cora (she/her)the software authors are urging everyone to update as soon as possible...#2021-12-1421:52dharriganI agree there, like any good author of software that has a security vunderability, that is totally due diligience.#2021-12-1421:52Cora (she/her)like even by the authority you're pointing to it's something to handle as soon as you can#2021-12-1421:52dharriganBut they would say the same if it even had a minor vunerability, or major, or omg, the world is about to explode if you even run this software.#2021-12-1421:53Cora (she/her)look: this argument is really boring and I'm grouchy. if you want to make another post with whatever language you want to use then go right ahead#2021-12-1421:53dharriganNaw, I'm tired too.#2021-12-1421:53Cora (she/her)¯\(ツ)/¯#2021-12-1421:53Cora (she/her)your comments are here for the record, people can see there's a big thread#2021-12-1421:53Cora (she/her)it's all fine#2021-12-1421:54dharriganyup 🙂#2021-12-1420:49chaosA tiny library hack to load bhauman/devcards with only the essential npm packages required, v0.1.0 https://github.com/ikappaki/devcards-loader#2021-12-1516:02henryw374nice! in case you didn't know, you could add highlight and marked to a deps.cljs file so they get installed automatically#2021-12-1519:03chaosThanks! I only thought about it in passing, will have a closer look at the details with the next opportunity, feel free to raise a PR in the meantime 🙂#2021-12-1504:08seancorfieldGiven the importance of this: https://logging.apache.org/log4j/2.x/security.html -- TL;DR: the JVM option was not sufficient to disable all lookup paths so installs with log4j2 2.10.0 - 2.14.1 with that option are still vulnerable. 2.16.0 is available now with the entire lookup machinery removed to prevent a potential DDoS possible through 2.15.0(!). Discussion in a thread please. Guess we'll be updating all our libraries again tomorrow!#2021-12-1514:47henryw374thanks! I released another version of https://github.com/henryw374/clojure.log4j2#2021-12-1515:11Michael WIf you can't upgrade you can strip JndiLookup.class from the jars, we have done that for several older systems with slow vendors at work and it appears to work great.#2021-12-1522:21Eugen@UAB2NMK25 - nice and simple solution for some situations#2021-12-1523:53Cora (she/her)it looks like log4j 2.15.0 has a more serious vulnerability than just a denial of service, making an upgrade even more important https://www.praetorian.com/blog/log4j-2-15-0-stills-allows-for-exfiltration-of-sensitive-data/#2021-12-1600:07seancorfieldThat's why I posted the link to the log4j security page here last night and described this in the TL;DR note attached to it.#2021-12-1600:08seancorfield(CVE-45046 which Praetorian also mention)#2021-12-1600:09seancorfieldInterestingly, I thought when I posted that link last night that the log4j security page explicitly said that 2.15.0 did not fix all lookup paths but now that I read it this afternoon, I can't see that mentioned.#2021-12-1600:11seancorfieldOh, here it is, way further down the page than I thought! "The reason these measures are insufficient is that, in addition to the Thread Context attack vector mentioned above, there are still code paths in Log4j where message lookups could occur: known examples are applications that use Logger.printf("%s", userInput), or applications that use a custom message factory, where the resulting messages do not implement StringBuilderFormattable. There may be other attack vectors." ( my emphasis )#2021-12-1600:12seancorfieldThis has been such a mess... I feel like I've been working on this issue in one form or another continuously since Thursday evening 😞#2021-12-1600:13seancorfieldToday, our datacenter sent us a notification that "log4j2 2.14.1" has been detected on your servers. It was still in the local Maven cache, even though both 2.15.0 and 2.16.0 were there as well (and everything on those servers is using 2.16.0 only at this point!).#2021-12-1600:15seancorfieldWe're still waiting on Elastic Cloud to follow up (they already notified customers to restart their clusters to pick up the JVM option -- which we've since all learned is not sufficient).#2021-12-1600:23Lukas Domagalaugh your situation sounds really exhausting, hope you guys get some well-earned rest after this week:+1:💪#2021-12-1600:33Cora (she/her)this vulnerability goes beyond the one in the CVE, though?#2021-12-1600:33Cora (she/her)in the link I posted#2021-12-1600:33Cora (she/her)that sounds really frustrating #2021-12-1600:33Cora (she/her)an entire week of work oh this#2021-12-1600:38seancorfieldThe log4j security page also goes beyond that CVE -- but it's a bit buried in the page. But the fact that 2.15.0 doesn't prevent all lookups was mainly why I posted that last night. The DDoS vuln was just icing on that particular cake.#2021-12-1600:41seancorfieldIt's good to have that Praetorian article posted too -- I suspect a lot of folks haven't read the log4j security page in detail (and, worse, it keeps getting updated so you have to keep going back and re-reading it over and over again!).#2021-12-1600:43seancorfieldIn another tech Slack, I've been arguing with people who continued to claim the JVM option was all you needed 😞#2021-12-1600:46seancorfieldAt this point, I'm sort of expecting 2.17.0 to appear with an explanation of why 2.16.0 doesn't solve everything either 🙂 (but, given 2.16.0 has removed the lookup machinery completely, I hope that's just me being cynical at this point!)...#2021-12-1600:47Cora (she/her)all eyes are on java logging libraries for vulnerabilities now so it may even be something else entirely #2021-12-1601:56quollAt this point I’m just grateful that my company doesn't use Kronos for payroll #2021-12-1606:25orestisBoth cloudflare and AWS have come up with firewall rules to drop log4j related attempts. I still see a few weird attempts reaching out nginx logs but otherwise it does a decent job. We still of course updated to 2.16.0#2021-12-1607:42seancorfieldGiven that requests can be broken down to ${${..}..} and not include the jndi string, I'm not sure how they're blocking it -- especially since it can occur in the body, the URL, or any header. But I guess if they're blocking the most obvious attempts that at least lessens the load on your app...#2021-12-1612:23rickmoynihanYeah this log4j2 thing is a real pain due to its extent. Auditing has taken up a lot of our time this week. I’m hoping this will settle down now; but I’m also quietly hoping we’ll see log4j2 cut back and release a cut down version — moving any fancy/risky networking things into optional extras, and getting them off the classpath altogether. I don’t want to throw the baby out with the bathwater; but I’m also wondering if people have any recommendations for a more minimal java based logging framework that works with clojure.tools.logging. I’m not looking at jumping ship just yet; but I’ve since discovered tinylog, which might fit the bill.#2021-12-1612:23rickmoynihanhttps://tinylog.org/v2/#2021-12-1612:25rickmoynihanThough I’d certainly appreciate any competing framework like this to have had a pretty thorough audit. At least with log4j2 we have many eyes right now.#2021-12-1822:20dakraThird High Severity CVE in Log4j Is Published https://logging.apache.org/log4j/2.x/security.html and HN discussion https://news.ycombinator.com/item?id=29604097#2021-12-2008:54rickmoynihanYeah I spotted that over the weekend too; this one seems less likely to be that big a deal for most folk though. Obviously YMMV#2021-12-1600:12tony.kayI'd like to announce the availability of a new CLJC statecharts library (similar to clj-statecharts). I would have loved to have contributed to the expansion of the existing one, but for various reasons it was not going to meet my needs. This version supports history (deep and shallow), has protocols for defining all of the significant subsystems from the code execution model (e.g. you could use CLJC functions, SCI interpretation, or even Javascript eval), the state-local data model (e.g. could use a durable database), event queue, and even the algorithm semantics. It is structured so that it can support the invoke concept from SCXML to run/cancel external processes in an abstract way while being able to pass events between the running statechart and that external statechart/service (that still needs further refinement). The built-in processor follows the SCXML (minus the XML requirement 😄) standard (in structure and semantics as far as they are defined in https://www.w3.org/TR/2015/REC-scxml-20150901/), and is intended to be structured for use in a distributed and durable environment (e.g. able to save/load a session, use a durable event queue, etc.) All that said, it does come with predefined and simple elements for all of those components, so it is easy to get started with, especially if you just wanted it for short-term in-memory programming. I will be using it in a distributed durable environment in production in short order, so the API is pretty stable, and any bugs will get worked out quickly. https://github.com/fulcrologic/statecharts#2021-12-1611:25martinklepsch@U0CKQ19AQ that’s awesome to see! Do you have any plans on a visualizer for this? I’ve been using XState in a CLJS codebase with good success and mostly picked it over clj-statecharts due to the visualizer feature which I just find very useful and well executed. The other day I even visualized a running statechart inside a node process, which was easier than expected.#2021-12-1616:37tony.kayI saw that as well and would love it, but it is very very low on my priority list. I think a JSON <-> Xstate converter would be easier, and then you could just use their tools 😄#2021-12-1616:41tony.kayI'm much more interested in some full stack things, like running charts over a long time (persisted in a database) and having charts that can cross-communicate full-stack, etc. Being able to version and persist the chart definitions themselves is also interesting to me as a software evolution path, which is why I abstracted away the execution model, so you are not stuck with embedded code on a machine def that becomes non-portable. Imagine a machine that can move from VM to VM (e.g. JVM <-> browser <-> node, etc). All sorts of possibilities, but mine are mainly focused around building stuff that has a distributed, cross-communication, long-lived aspect to it (payment/subscription system for a business is where I'm using it first).#2021-12-1616:42tony.kayBut I also see some really cool ways to build complete Fulcro apps with it, where the abstracted data model and cross-env messaging could integrate very well with FUlcro's full-stack story.#2021-12-2004:41Lucy WangGlad to see another statecharts library! During the last two years I find statecharts more and more convenient in all kinds of frontend & backend projects!#2021-12-1610:20Shantanu KumarCambium has a new release including Logback security-fix w.r.t. LOGBACK-1591: https://cambium-clojure.github.io/#2021-12-1612:24Lukas Domagalathat looks nice! is it ok if I ask what the conceptual difference would be between this and using mulog with an slf4j adapter?#2021-12-1613:03Shantanu Kumar@U02EMBDU2JU AFAIK (in my very limited reading) mulog is mainly for observability and metrics whereas Cambium is for SLF4j based data-oriented logging. Cambium has also been used to log metrics to ELK stacks though. As per https://github.com/BrunoBonacci/mulog/issues/25 there doesn't appear to be a mulog SLF4j adapter. For more discussion please feel free to ping in the #cambium channel.#2021-12-1618:07HuahaiReleased symspell-clj 0.2.4, a spell checker library for Clojure. It is based on a Java port of SymSpell spell checker, a fast spell checker using pre-calculated typos. https://github.com/juji-io/symspell-clj#2021-12-1621:43mkvlrEarlier this week we released Clerk io.github.nextjournal/clerk {:mvn/version "0.4.305"}, the biggest update since it’s initial release. 🔗https://github.com/nextjournal/clerk. Highlights include: • Ⓜ️⬇️ Markdown support for prose-heavy docs • 👁️ New viewer api with and open transform & fetching behavior to allow fetching anything from the JVM, see https://github.com/nextjournal/clerk/blob/5e05a77b2bc2e8b39c2f41812611b2a0cca9bd32/notebooks/viewers/image.clj🪄 clerk-eval to call back into the JVM from viewers, see https://github.com/nextjournal/clerk/blob/5e05a77b2bc2e8b39c2f41812611b2a0cca9bd32/notebooks/dice.clj🙈 controlling code cell visibility, see https://github.com/nextjournal/clerk/blob/5e05a77b2bc2e8b39c2f41812611b2a0cca9bd32/notebooks/visibility.clj 📺 Also, my https://twitter.com/mkvlr/status/1471187433119268872 was released yesterday. Along with it, we’ve created a repo of https://twitter.com/mkvlr/status/1471188802064596992 I recommend checking out. Spreading the word is very much appreciated. 🙌 🙏#2021-12-1706:17robert-stuttafordJust a sense-check - we could use clerk to compose in emacs, check source into git, and then have clerk render pages within our own Ring server, inside our own platform, right? As an internal documentation system?#2021-12-1711:01mkvlrchecking into git very much. Regarding the rendering, do you even need a server? https://nextjournal.github.io/clerk-demo/ is just served from a github page but you can serve it from anything, also a S3 or Google Cloud Bucket. Or even have a single html file with everything in it like on https://snapshots.nextjournal.com/clerk-demo/build/57f4eaf93c604ea0fe6697c27d509becaff1a038/index.html#2021-12-1711:17robert-stuttafordthanks @U5H74UNSF - mainly it's about access control. could we put it in our app where we have all that figured out already? it's looking like 'yes'! 🙂#2021-12-1711:18robert-stuttafordclerk + ns = live repl env -> output html with js = 'reader'. the output has a way to update when the live repl env tells it to. right?#2021-12-1711:18robert-stuttafordthis is insanely cool btw#2021-12-1711:19robert-stuttafordlike my brain is struggling to grasp just how game-changing this is#2021-12-1711:19robert-stuttafordgood thing i've got 3 weeks of downtime to play in 😅#2021-12-1711:21mkvlryep, also works in both directions#2021-12-1711:23mkvlrso if you’d like to serve it inside your app you could: have a set of notebooks that you turn into edn files, via https://github.com/nextjournal/clerk/blob/5e05a77b2bc2e8b39c2f41812611b2a0cca9bd32/src/nextjournal/clerk.clj#L328#2021-12-1711:23robert-stuttafordtheoretically also possible to emit the html directly rather than dumping on disk and then serving that disk file via e.g. io/resource right#2021-12-1711:24robert-stuttafordright!#2021-12-1711:25mkvlryes, see https://github.com/nextjournal/clerk/blob/main/src/nextjournal/clerk/view.clj#L166#2021-12-1711:25mkvlror you’d want the static-app case, without a websocket, so https://github.com/nextjournal/clerk/blob/main/src/nextjournal/clerk/view.clj#L187#2021-12-1711:26robert-stuttafordbril, that gives me what i need. thanks Martin!#2021-12-1711:27mkvlrgreat. Also have some ideas around supporting the code browser / living docs use case better#2021-12-1711:28robert-stuttafordplugging this in behind our access control and into our datomic database (which is has data going back to 2013) is going to be so fun#2021-12-1711:29robert-stuttafordlive 'ADRs', data migration analysis, so much potential#2021-12-1711:29robert-stuttafordi'll be sure to take notes about any frictions i encounter!#2021-12-1712:12mkvlrhttps://twitter.com/jackrusher/status/1471813316871872529?s=21#2021-12-1714:05robert-stuttafordwell yes please!#2021-12-1704:30djblueJust released https://github.com/djblue/portal/releases/tag/0.19.0, a data inspection / visualization tool. It now includes the ability for users to define their own reagent views via SCI ClojureScript. Docs and examples are in the works but initial apis can be found https://cljdoc.org/d/djblue/portal/0.19.0/api/portal.ui. This is an initial release so still a little experimental, but should be good enough to start playing with. Feedback welcome!#2021-12-1704:33djblueFor those looking for an intro to portal, check out https://www.youtube.com/watch?v=Tj-iyDo3bq0!#2021-12-1819:06practicalli-johnhttps://github.com/practicalli/clojure-deps-edn is a collection of community tools as a user level configuration for Clojure CLI tools. • updated all aliases to use the latest library versions (using antq) • added security/nvd alias to check library dependencies against the National Vulnerability Database • added :test/watch to run Kaocha test runner in watch mode for any project, a quick way to get fast feedback - clojure -M:test/watch#2021-12-1908:45vemvVery nice! I'd recommend documenting the nvd usage such that https://github.com/rm-hull/nvd-clojure#avoiding-classpath-interference is honored In particular, the classpath the nvd program itself will be running should never be affected by a given project's dependencies. This can be as easy as cd ~ before running the program. Next point, the analyzed classpath's should be received as an argument out of a clojure -Spath invocation, please don't let it be inferred (that API will soon be deprecated)#2021-12-1918:10practicalli-johnI've updated the command to run the :security/nvd alias to include the two arguments. As :security/nvd is a user wide alias, then clojure-nvd is not included in the project path, which is what the documentation seems to warn against. However, the clojure-nvd jar is merged into the classpath when used as an alias no matter where the clojure command is run, so it would still be there. Perhaps this is a candidate for being a tool and dropping this alias (or marking the alias with a warning) This would make a good example of why the -Ttool approach is useful.#2021-12-1918:51vemvThanks! Looking reasonable > However, the clojure-nvd jar is merged into the classpath when used as an alias no matter where the clojure command is run, so it would still be there. One should be careful both ways: a given project's dependencies can affect nvd-clojure's own dependency tree. So cd ~ does buy one extra isolation for that one case as well. -Ttool is a bit better which is why we added it to nvd-clojure. Still, I was disappointed that Tools adds . to the classpath, so cd ~ still buys a little bit of correctness. For a security-oriented tool I'm generally favoring correctness over convenience/minimalism.#2021-12-2012:35ericdalloclojure-lsp Released https://clojure-lsp.io/ 2021.12.20-00.36.56 with new features, fixes and performance improvements! The main focus of this release was fixing some bugs and improving lint performance, besides that we had a great feature addition with a new custom LSP feature, the Test Tree, which ATM show details about the test hierarchy of the current file, check the screenshot! We also added support for babashka pods babashka! Soon, this should be available on babashka pod registry and then you will be able to run clojure-lsp directly from babashka scripts/tasks! We also bumped to latest clj-kondo release clj-kondo, which was a major release with a lot of new things! Check it out the major release https://clojurians.slack.com/archives/C015AL9QYH1/p1639690696080500. This release was supported by Clojurists Together 💜 clojurists-together Check #lsp channel for more information#2021-12-2119:02Kelvinhttps://github.com/yetanalytics/colossal-squuid v0.1.3 v0.1.2 has been released with one major change - it is now deployed on Clojars. No more fiddling with Git SHAs. (UPDATE: we pushed v0.1.3 up since we found that a fatal bug was introduced in v0.1.2.)#2021-12-2119:03KelvinI want to thank @U04V70XH6 for making this update possible with his build-clj library. Not only does it make it easy to build and deploy JARs, but it works well with GitHub Workflows in order to automate the deploy process.#2021-12-2214:29bozhidarCIDER 1.2 ("Nice") is out https://metaredux.com/posts/2021/12/22/cider-1-2-nice.html Cheers! cider#2021-12-2220:06borkdude#nbb v0.1.0 Ad-hoc CLJS scripting on Node.js using SCI. nbb See changelogs in #releases https://clojurians.slack.com/archives/C015AL9QYH1/p1640203769096100#2021-12-2309:20Ben Slesshttps://github.com/bsless/more.async release v0.0.8 with new features! more.async is a library containing some bits I often found I miss when programming with core.async, especially around pipelines and dealing with time. • declarative data language for building data flow systems • circuit breaker and rate limiter pipes • Other less exiting bits and bobs#2021-12-2314:11vemvhttps://github.com/rm-hull/nvd-clojure - 2.0.0 - security checker nvd-clojure checks your dependency tree and reports known-vulnerable dependencies such as specific log4j and logback versions. In 2.0.0, we're removing old APIs that commonly lead to inaccurate usage. Correct usage is now best summarized in its updated README and includes @seancorfield's excellent addition of a clojure -Ttools tool. Misc other improvements reflected in the https://github.com/rm-hull/nvd-clojure/blob/2.0.0/CHANGELOG.md#changes-from-190-to-200.#2021-12-2318:07robert-stuttafordfwiw #web-security#2021-12-2321:46seancorfieldhttps://github.com/seancorfield/honeysql v2.2.840 -- Turn Clojure data structures into SQL • Fix #375 for :nest statement. • Fix #374 by removing aliasing of :is / :is-not -- this changes the behavior of [:is-not :col true/false] to be correct and include . Using :is / :is-not with values that are not Boolean and not nil will produce invalid SQL. • Update test dependencies. • Update build-clj to v0.6.5. Follow-up in #honeysql -- regarding #374 please see https://cljdoc.org/d/com.github.seancorfield/honeysql/2.2.840/doc/getting-started/sql-operator-reference for more details#2022-12-2719:33lilactownWhat is a hike, but a really long walk? ⛰️🚶:skin-tone-2: I am pleased to announce a new library, https://github.com/lilactown/cascade. It provides a couple of helpful capabilities in two namespaces 1. cascade.core is a collection of continuation-passing, thunk-producing versions of many Clojure core functions. This provides the ability to write recursive algorithms that do not use the call stack in Clojure(Script) by combining familiar operations like reduce and into with trampoline. 2. cascade.hike is like `clojure.walk`, but defines `walk` in a way that supports walking very large, nested data structures without using the call stack. prewalk, postwalk et al. work just like their original counterparts but can traverse arbitrarily nested forms without overflowing the stack. Documentation is https://cljdoc.org/d/town.lilac/cascade/1.1.0/doc/readme. Any questions, comments, or issues can be DMed to me or opened in a GitHub issue. Happy hiking!#2022-12-2719:41Ben SlessWhen you refactor so hard you make a library?#2022-12-2719:41lilactown😂 exactly that#2022-12-2719:42lilactownhad an itch I needed scratched and thought maybe other people would too!#2022-12-2719:44Ben SlessNicely done I'm of a mind to extract the lazy streams idea from micro kanren and see how it interacts with this :thinking_face:#2022-12-2720:03lilactownsounds neat. not familiar with that#2022-12-2720:26Ben SlessIt's about interleaving execution or backtracking fairly. Very interesting#2022-12-2804:52Ben SlessAnother thing which I find interesting is how CPS identity is 1 in Church numerals and constantly is 0#2022-01-0409:12Jakub Holý (HolyJak)Hi! It would help me to understand when I might want to use Cascade if the README has some motivating examples. I do no think I run into the need that it satisifies. What kind of algorithms/problems that need you have you two encountered? 🙏#2022-01-0409:16Ivanfrom what I understand, it emulates recursion but it doesn't fill up the stack. ie, a classic problem is depth-first search on a tree (think of reimplementing ls -R for a filesystem) - the recursive solution is simple but in practice limited by the stack size, so if the depth exceeds some limit it crashes. With cascade you keep the simple nature of the solution but the limit is "magically" gone.#2022-01-0411:55Ben SlessSpecifically, Will came to this solution trying to prevent stack overflows in his other library, pyramid#2022-01-0417:29lilactown@U0522TWDA the cascade.walk namespace is what originally motivated me to write the rest of the library. it allows you to walk an arbitrarily nested Clojure data structure without worrying about failing with a StackOverflow exception#2022-01-0417:32lilactownlike Ben said, I wanted this ability in pyramid to normalize extremely large data structures. See it used here: https://github.com/lilactown/pyramid/blob/trampoline/src/pyramid/core.cljc#L120-L133#2022-01-0417:35lilactowna library that meets a similar need is clojure.zip. cascade is quite a bit faster than zippers IME, although I haven't figured out how to move up/down/left/right in all the ways zippers do yet#2022-01-0417:36lilactownthere's some other interesting properties that Ben referenced above, like the ability to pause/resume and interleave the calculation of algorithms that are written in the trampolined styled that cascade is#2022-01-0421:14Jakub Holý (HolyJak)Thanks a lot!#2022-12-2813:28simongrayhttps://github.com/simongray/datalinguist is a REPL-friendly Clojure wrapper for Stanford University’s CoreNLP Datalinguist tries to make the https://stanfordnlp.github.io/CoreNLP/ more manageable by introducing a more data-oriented API. Several Clojure protocols are supported, e.g. Loom graph protocols and Datafy. This makes for a much smoother experience than the fairly cumbersome Java experience. Currently, the full language annotation pipeline is available in the core datalinguist namespace, while certain post-annotation features such as dependency parsing, semgrex (regex for dependency parse graphs), and triple generation have received wrappers too in separate namespaces. You can use the various annotators through their supported language models (downloaded as separate dependencies — see README) to extract valuable information from text. Have fun!#2022-12-2813:58simongrayI should probably qualify what I mean by data-oriented. The native Java objects that are the outcome of the language annotation process are used directly as input for the various post-annotation functions since this allows for the most direct mapping to CoreNLP’s various methods, however almost all of them can be recursively datafied at any point should you wish. Furthermore, the config used to construct a language processing pipeline is just a regular Clojure map. The point is to maximise integration with both CoreNLP as well as a typical Clojure workflow.#2022-12-2820:25slimslenderslacksA clojure cli https://clojure.org/reference/deps_and_cli#_using_named_tools for packaging clojure apps into container images using https://github.com/GoogleContainerTools/jib (docker-less build/push) - https://github.com/vehvis/lein-jib-build already exists for leiningen. This supports jib builds in the deps.edn world, and comes with some opinions on how to layer jar dependencies in container images. https://github.com/atomisthq/jibbit#2022-12-2909:50orestisWoo I was looking at juxt pack just yesterday since it was the only thing that Google brought up for this. Glad to see this. Thanks!#2022-12-2915:40eskosI don’t have an env handy for testing this immediately so I’ll ask a dumb question instead - does this tool add dependencies as JARs in a separate layer instead of making an uberjar? Because if yes, that’s 💯🎉#2022-12-2916:22slimslenderslacks@U8SFC8HLP ya, that's exactly what it does. It uses the basis from deps.edn to copy all of the dependencies into one layer. Then it generates a Class-Path manifest entry in the application jar and copies that to its own layer.#2022-12-2916:53slimslenderslacks@U7PBP4UVA feel free to reach out if you have any issues. I've been using this to deploy a pretty broad set of clojure projects (mostly deploying to gcr and ecr so far) but my entrypoints are very boring (`java -jar app.jar` with a configurable namespace for the -main - I sort of anticipate that this might not be sufficient. Also happy to add some more authenticators for image pushes - I now know more than I'd like to about registry authentication so I'd like that to be useful somehow.#2022-12-2916:58orestisI'm still evaluating containers for production etc but in our case we're on AWS so ECR etc. #2022-12-2917:07slimslenderslacksCool, the author of lein-jib-build had already worked through most of the details for authenticating to ECR via environment variables, aws profiles, assume role, ... It's working well in practice.#2022-12-3010:35Ivar RefsdalNeat project! I would recommend adding "-Dclojure.main.report=stderr" "-Dfile.encoding=UTF-8" to the java command in order to have helpful error messages on exceptions (and not a file) and also setting the default encoding to UTF-8 (IIRC this will affect e.g. (slurp (io/resource "some-classpath-file"))). I would also advise against using pure clojure.core/read-string as it can execute code, and instead use clojure.edn/read-string.#2022-12-3015:47slimslenderslacks@UGJE0MM0W thanks! Those do seem like better defaults - have added them now. Good catch on read-string too. Thanks again.#2022-01-0411:33eskosThose two have different semantics though, which is why https://github.com/clojure/tools.reader exists 🙂#2022-01-0511:57Ivar RefsdalWhat exactly are you trying to say @U8SFC8HLP? > Presuming you're reading typical edn data [on the JVM], clojure.edn is the preferred option. Rough quote from Alex Miller https://groups.google.com/g/clojure/c/d61ImK2VCag.#2022-12-2917:08borkdudebabashka.process Clojure wrapper for java.lang.ProcessBuilder v0.1.0 • Resolve binaries on Windows using `fs/which` • String with backslash is tokenized incorrectly https://github.com/babashka/process/issues/47 • Support `deref` with timeout https://github.com/babashka/process/issues/50 (https://github.com/SevereOverfl0w) • Fix piping with `$` macro https://github.com/babashka/process/issues/52 See the full changelogs https://github.com/babashka/process/blob/master/CHANGELOG.md#2022-12-2917:32borkdudebabashka v0.7.0-v0.7.3: fast starting native Clojure scripting environment. Highlights: • compatibility with clojure.spec.alpha. Also see https://blog.michielborkent.nl/using-clojure-spec-alpha-with-babashka.html • Error message/output improvements • arm64 docker images • Load babashka tasks from other bb.edn file (--config and --deps-root options) See the full changelogs https://github.com/babashka/babashka/blob/master/CHANGELOG.md#2022-12-3009:39buzzdani’m not sure if it was already here but its worth knowing it - Appsflyer open-source libs for protobufs: https://medium.com/appsflyer/appsflyers-open-source-libraries-for-clojure-and-protocol-buffers-da9a87583c41#2022-12-3019:16Kelvinhttps://github.com/yetanalytics/colossal-squuid v0.1.4 has been released. Things to note: • Added a uuid->time function to extract a timestamp out of a SQUUID (courtesy of @mithrandir03) • Extracted the Clojars deployment job into a separate GitHub Action. (You can take a look at the action https://github.com/yetanalytics/actions/blob/main/deploy-clojars/action.yml if you wish to use a similar action for your own deployment pipelines.)#2022-12-3111:52simongrayhttps://github.com/sinostudy/pinyin is a small CLJC library for converting between different styles of the Pinyin romanization system used for Standard Chinese. Unless you are interested in the Chinese language or need to implement e.g. search using romanized Chinese, you probably won’t care about this ;-)#2022-12-3122:03plexusGood stuff! I once wrote a library like this in Ruby, might have been my first open source project https://github.com/plexus/ting#2022-01-0107:48simongrayThis was actually also my first Clojure thing, then it got entangled into a big (now offline) dictionary app, and now it’s been put into this library.#2022-12-3122:02plexusCorgi v1.0 is out, a lightweight Emacs config for the Clojure developer, with vim-style modal editing and Spacemacs-style leader key bindings https://github.com/lambdaisland/corgi#2022-12-3123:08eggsyntaxLooking through the user manual, as I'm currently a spacemacs user but have ambitions to go lighter-weight, and will provide a bit of feedback on what I read if that'll be useful. Context: spacemacs is the only emacs I've used; I've been using it for a few years and have lots of customization, but there are big swaths of emacs knowledge that I don't have yet -- I've just picked stuff up as I needed it rather than really diving deep at any point. > If you don’t like what any of them is doing, then copy the relevant package over to your personal config and customize it from there. > This seems kind of vague to me unless it's spelled out in more detail elsewhere. Do you mean copying the code inside the package to my own init file? Or do you mean importing the package but somehow providing configuration options?#2022-12-3123:53eggsyntaxEverything else in the user manual seemed totally clear! Possibly other feedback when / if I actually install it. Thanks for making it!#2022-01-0101:09plexusLiterally copy the code into your config and tweak from there#2022-01-0110:49jamesThis looks really useful. I tend to use vanilla emacs key bindings but as you say maybe I should try to reduce RSI by going modal in 2022.#2022-01-0121:19vemvSweet! Looks like a valuable contrib to the landscape - we definitely need less monolithic configs that can be understood better#2022-01-0311:54oxalorg (Mitesh)I've been using Corgi for the better part of a year now and I love it. My corgi dotfiles can be found here if someone is interested: https://github.com/oxalorg/.emacs.d#2022-01-0312:13plexusNice @U013MQC5YKD, note that we now standardize on user-keys.el and user-signals.el, so if you use those file names Corkey will pick them up automatically. We now also watch these files for changes, so they reload automatically.#2022-01-0312:14plexusbut you have to use corkey/load-and-watch instead of corkey/install-bindings#2022-01-0312:15plexusring-bell-function 'ignore is now part of corgi-defaults#2022-01-0313:03borkdude#obb: Ad-hoc ClojureScript scripting of Mac applications via Apple's Open Scripting Architecture. https://github.com/babashka/obb Demo: https://twitter.com/zaneshelby/status/1477988369154121734 By @zane and yours truly.#2022-01-0313:43brcostahttps://plugins.jetbrains.com/plugin/18108-clojure-extras/ v0.3.0 has been released! clojure-extras is an Intellij plugin to add custom features such as inline evaluation, custom syntax highlighting and linting. In this latest version we added full clj-kondo integration, check it out!#2022-01-0316:36borkdudeMaybe good to add: this is a plugin which runs in addition to Cursive (and depends on Cursive) and does not replace or conflict with it!#2022-01-0320:51Cora (she/her)is there any documentation on how to use this plugin?#2022-01-0321:38borkdude@U02N27RK69K Right now there is only one option: And if you are connected to a REPL, you get some option to inline evaluate something#2022-01-0321:39borkdudebut I agree some docs would be nice :)#2022-01-0400:54brcostaGood point, I will work on some docs! For now clj-kondo integration is almost zero-conf and to inline evaluate expressions you can use the actions on Tools menu (you can setup keyboard shortcuts in the keymap sections on Preferences). Also, there is a Clojure Extras section on Color Scheme to change custom highlighting.#2022-01-0317:40tony.kayReleased 1.0.0-alpha5 of statecharts: https://github.com/fulcrologic/statecharts which has some new helpers for testing, and a few bug fixes.#2022-01-0317:41tony.kayReleased 1.1.0-RC15 of fulcro-rad which adds load-options to reports to enable things like incremental row detail loading. https://github.com/fulcrologic/fulcro-rad/commits/develop#2022-01-0320:01chrisnI just released https://github.com/clj-python/libpython-clj version 2.014. I had a blast https://github.com/clj-python/libpython-clj/issues/191 to build a Java API into the library (comes with the jar). Also it includes a fastpath for repeatedly calling a python function - https://clj-python.github.io/libpython-clj/libpython-clj2.python.html#var-make-fastcallable. Go tell all your Java friends that the fastest, most robust, and most featureful python integration available for the JVM now has Java bindings so they can use it without knowing a lick of Clojure. P.S. - that issue has a lot of interesting information in it and it gets better near the end :-).#2022-01-0320:25metasoarousKICK! ASS!#2022-01-0322:02chrisnThanks :-)!!#2022-01-0322:04Ivangreat work!#2022-01-0509:12rickmoynihanI don’t think I announced this 3 months ago but we forked dogstatsd-clj here. It is a statsd client, with support for the datadog dogstatsd extensions; the non-datadog specific stuff should also work with other statsd systems, e.g. graphite… https://github.com/Swirrl/dogstatsd It makes a few improvements to the original; most notably not using a singleton client for the connection, which makes it much less opinionated and easier to use in component systems e.g. integrant, component etc. This required making a breaking change to the original library; hence it being a fork.#2022-01-0510:49robert-stuttafordnice work! we may end up switching to your version 😁 also, not sure if your update accounts for this or not, but it looks like we missed this Issue: https://github.com/Cognician/dogstatsd-clj/issues/5#2022-01-0510:56rickmoynihanYes, we fixed that too: https://cljdoc.org/d/io.github.swirrl/dogstatsd/0.1.39/api/swirrl.dogstatsd#distribution!#2022-01-0512:04borkdudeThis dependency also works with #babashka btw :)
$ bb -cp $(clojure -Spath -Sdeps '{:deps {org.babashka/spec.alpha {:git/url "" :git/sha "1a841c4cc1d4f6dab7505a98ed2d532dd9d56b78"}}}'):test -e "(require '[swirrl.dogstatsd-test]) (clojure.test/run-tests 'swirrl.dogstatsd-test)"

Testing swirrl.dogstatsd-test

Ran 1 tests containing 1 assertions.
0 failures, 0 errors.
{:test 1, :pass 1, :fail 0, :error 0, :type :summary}
@U0JEFEZH6 is running a similar thing with bb on their nodes.
#2022-01-0512:09rickmoynihanYes I would have expected it probably would :thumbsup: I would mention it in the README, but as it stands there’s no CI setup here, and without CI testing it under bb it I’m not 100% comfortable making the claim that it will remain that way… though I don’t expect any major changes to the library anytime soon#2022-01-0512:11borkdudeI already made an issue about it on the bb side, we test a lot of libraries on bb's CI., https://github.com/babashka/babashka/issues/1128 If you're open to receiving a github actions config, I can setup both clj + bb tests.#2022-01-0512:12borkdudeYou can introduce bb reader conditionals or just drop bb support at any time of course. We'll just fork the lib if necessary if people find it useful. But you can also use bb reader conditionals to support bb separately from clojure in case of incompatible changes.#2022-01-0512:20rickmoynihanI’m certainly open to seeing it; but I wouldn’t want to waste your valuable time, as we’re currently using circleci for some of our other builds, with some older stuff on travis (probably to be migrated at some point) — and I’d rather not have to introduce a 3rd CI into the mix. That said we have started using GH actions for some checks, so might not be that big a deal… I’d still like to keep the cognitive overhead down for everyone though#2022-01-0512:23borkdudeI'm also familiar and even a fan of CircleCI, that wouldn't be a dealbreaker to me. But it's ok, I'll just test it at the bb side and if things will break, then we'll just improve bb in the best way we can ;)#2022-01-0512:35rickmoynihanI’m not sure it’s a dealbreaker for me to be honest 🙂 Tell you what, if you are still happy to contribute the GHA — I’ll merge it and if/when we do move to circle, I’ll promise to also include bb support in the tests (and maintain it as best I can)🙂#2022-01-0512:37borkdudesounds good#2022-01-0515:05lukaszOh nice, our statsd client implementation is very simple, but also supports only the bare minimum statsd protocol (so no DataDog extensions like tags etc).#2022-01-0717:23borkdude@U06HHF230 as promised: https://github.com/Swirrl/dogstatsd/pull/1#2022-01-0717:23borkdudeplease squash the commits into one (github has a squash/merge option)#2022-01-0717:25rickmoynihanWow amazing, thank you so much! I’ll take a proper look at it on monday as I’m about to finish for the day 🙇#2022-01-0718:25lukasz@U06HHF230 also, if it helps - our (other) Statsd client (which wraps DD's Java lib) runs a "real" UDP server so we can ensure all metrics are sent correctly over the wire, you can find it here: https://github.com/nomnom-insights/nomnom.stature/blob/master/test/stature/helper/statsd_server.clj#2022-01-1009:07rickmoynihan@U0JEFEZH6 Thanks. I did consider doing something like that, it just didn’t feel worth it at the time — given that it had no tests prior to forking it. The main thing adding the tests was intended to catch was just dumb stuff like syntax errors and calling functions wrongly. So there are also some specs that test the inputs to format-metric are correct, which I think give a slightly bigger bang per buck than just asserting the string you sent can be received over UDP, though I’d certainly be happy to have a test for that and a few other things. Unfortunately most of the complexity and testing here is in making sure the metric events are interpreted as expected in your metrics system, and there’s not really a good automated way to do that; at least not one that feels worth the complexity cost.#2022-01-0518:10Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.3.1058 is now available • https://clojure.atlassian.net/browse/TDEPS-207 Fix deadlock in version range resolution • https://clojure.atlassian.net/browse/TDEPS-215 Fix race condition during parallel loading of s3 transporter • Don’t track local deps.edn manifest for caching if deps project doesn’t have one • Update maven-core to 3.8.4, aws libs, tools.build, tools.tools to latest • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1109#2022-01-0603:52emccueEver wanted to build Java programs with Java - no maven or gradle? I made a very basic wrapper around tools.build that should make it easier to write build programs for deps.edn in Java Super alpha. Functionality may be broken or missing entirely. https://github.com/bowbahdoe/jproject https://github.com/bowbahdoe/jproject-example#2022-01-0603:57seancorfieldThe example seems to suggest you still need the Clojure CLI installed for this to work?#2022-01-0604:05emccueyep. Still nowhere near a state i could walk up to a stock Java dev and convince them, but enough to show the concept imo#2022-01-0604:12emccuethe next steps would be 1. Think way more about how to expose the basis concept 2. Fill out and document the build tools wrapper 3. Wrap the clojure CLI’s functionality - probably making a graalvm executable with a “simplified” api probably along the lines of
jproject --help
jproject --tree
jproject --pom
jproject run src/Something.java
jproject run --alias=build build/Build.java
jproject run --alias=build build/Build.java --argForBuildProgram 123
#2022-01-0604:12Alex Miller (Clojure team)Terrifying#2022-01-0604:28emccuegood#2022-01-0604:33Alex Miller (Clojure team)I feel bad that you're spending time making it#2022-01-0604:35emccuewhy so?#2022-01-0604:37Alex Miller (Clojure team)just pouring concrete over all that lovely clojure#2022-01-0604:39emccuemakes for good rebar#2022-01-0604:39Alex Miller (Clojure team)I've added options to those build tasks at least a dozen times in the last 6 months. every time I do that, you'll have to add new fields and methods and whatever#2022-01-0604:40emccueif anyone uses it, which i doubt#2022-01-0604:44emccueand if i get it into a workable/marketable state, which is doubtful. Especially considering that no IDE resolves deps.edn dependencies without a clojure plugin so any effort to make it seem “java native” is probably moot#2022-01-0604:45emccueand anyone who is comfortable installing a clojure plugin might as well just write the build program in clojure#2022-01-0605:10emccueNOW you can feel bad#2022-01-0605:39seancorfieldYou sure are dedicated to this 🙂#2022-01-0606:49gklijsNot really, and if I did I would use jbang, https://jbang.dev/#2022-01-0615:08emccuebut can jbang let me stay up until 4am writing a script for test coverage
public final class GenerateCoverage {
    public static void main(String[] args) throws IOException {
        var execFileLoader = new ExecFileLoader();
        execFileLoader.load(new File("jacoco.exec"));
        var htmlFormatter = new HTMLFormatter();
        var fileMultiReportOutput = new FileMultiReportOutput(new File("target/coverage/html"));
        var visitor = htmlFormatter.createVisitor(fileMultiReportOutput);

        var coverageBuilder = new CoverageBuilder();

        for (var file : Files.walk(Path.of("target", "src"))
                .filter(Files::isRegularFile)
                .map(Path::toFile)
                .toList()
        ) {
            var analyzer = new Analyzer(execFileLoader.getExecutionDataStore(), coverageBuilder);
            analyzer.analyzeAll(file);
        }

        var bundle = coverageBuilder.getBundle("project");
        visitor.visitInfo(
                execFileLoader.getSessionInfoStore().getInfos(),
                execFileLoader.getExecutionDataStore().getContents()
        );
        visitor.visitBundle(bundle, new ISourceFileLocator() {
            @Override
            public Reader getSourceFile(String packageName, String fileName) throws IOException {
                var resource = GenerateCoverage.class.getResourceAsStream(
                        packageName.replace(".", "/") + "/" + fileName
                );
                if (resource == null) {
                    return null;
                }
                return new InputStreamReader(resource);
            }

            @Override
            public int getTabWidth() {
                return 4;
            }
        });
        visitor.visitEnd();
    }
}
Which as horrible as it sounds and looks - a team of 10 engineers could not figure out how to properly filter certain files out of coverage for a week with the maven plugin (actual story, not an overstatement for dramatic effect)
#2022-01-0615:33ericdalloAmazing! I'll certainly change my java code on clojure-lsl to use that!
#2022-01-0619:36borkdudeThis reminds me of a Java API I once wrote for SCI. After 2 months I just gave up and told people to make their own dedicated Clojure wrapper and call that from Java.#2022-01-0719:56AJ JaroWhat a terrifying adventure!#2022-01-0700:33marinacavalariHey everyone! I'd like to share you my first open source project. As a Data Engineer I felt some lack of tools and libraries to interact with one of the most used data platform, Databricks. So in this sense, I'm releasing the first part of https://github.com/marinacavalari/databricks-sdk-clojure, completely in clojure. It contains only a few function to access the API, but I'll keep working on that, every feedback is very welcome 🙂 thanks#2022-01-0702:57EddieThis is exciting! We have relied heavily on Databricks at work for years and I will definitely be checking this out. We are a 100% Scala shop, but I am always looking for ways to sneak Clojure in! Out of curiosity, do you have any experience deploying spark apps written in Clojure to Databricks? If so, how what tools do you use to make that happen?#2022-01-0712:38marinacavalarihi Eddie! Yeah all our interactions with Databricks nowadays rely on clojure. We use it to load datasets into Databricks metadata, schedule jobs, create single user clusters, and more, if you like, call me dm and I can share with you some tips#2022-01-0814:13Jakub Holý (HolyJak)Awesome! Good luck with the library!#2022-01-0711:54pezA new Calva version just published: 2.0.233. • https://github.com/BetterThanTomorrow/calva/issues/953 • Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1447 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1444 The major change In Calva itself here is the VS Code Testing UI integration, contributed by @marc-omorain. Thanks Marc! ❤️ gratitude Then Calva also automatically picks up many of the wonderful nrepl/orchard improvements. (No side-loading support yet, though. If you understand this concept well and want to contribute of your time to Calva, please do!) Here’s demo of the test ui stuff: https://www.youtube.com/watch?v=bUBrmvczAwg#2022-01-0719:37Carsten BehringA new release of , the idiomatic machine learning library for Clojure, is out. Version 0.1.2 makes the library as well java 1.8 compatible. https://clojars.org/scicloj/scicloj.ml/#2022-01-0819:04yogthosannouncing a new Clojure web framework with some lessons learned from Luminus https://yogthos.net/posts/2022-01-08-IntroducingKit.html#2022-01-0907:51Teemu KaukorantaI see a lein-template folder in the repo, do you still use leiningen for something or is it just a leftover from Luminus?#2022-01-0915:17yogthosoh, clj-new uses the same template structure as leiningen#2022-01-0915:20eskosThere's unfortunately a name clash with https://github.com/gregsh/Clojure-Kit, I wonder how SEO will get confused by this...#2022-01-0916:25ChaseWhere would you like discussion on this? Are you thinking of starting a #kit channel?#2022-01-0916:38borkdude@U9J50BY4C #kit-clj#2022-01-0916:41Chasety! Moving my question to there.#2022-01-0917:40yogthosand didn’t realize clojure-kit existed, I guess this could lead to a bit of confusion, at least the domains are non overlapping :)#2022-01-0918:19borkdudethere's also http-kit. kit is a pretty bad name of you're optimizing for search engines ;)#2022-01-1114:43eccentric JLooks great! Nice job#2022-01-0915:34AdoHey all! Notion to MD is a working release of the tool that the team at Flexiana built to automate synchrony between Notion and Readme files. But one can broaden the use case list indefinitely. Like backing up Notion data locally. As well as syncing Org files with Notion. Or moving data between Notion and any other service/location there is. The list goes on! https://github.com/Flexiana/notion-to-md#2022-01-0918:33EugenAnnouncing calcite-clj https://github.com/ieugen/calcite-clj . A small library to allow writing Apache Calcite adapters in Clojure. Calcite is a relational algebra library that can expose any data source as SQL. It's used for data federation. There is an example if you are curious how sample code looks: https://github.com/ieugen/calcite-clj/blob/main/examples/simple/src/calcite_clj/simple.clj .#2022-01-0919:32refsetThis looks fun 🙂 what was the main movitation behind it? Also, out of curiosity. have you taken a look at XTDB's Calcite->Datalog implementation before? https://github.com/xtdb/xtdb/tree/master/modules/sql (I'm sure it could make use of a few of the tricks you discovered!)#2022-01-0919:37Eugenhi, a personal project - trying to implement OFBiz entity engine on top of Calcite - perhaps even use it at work. I did not know about that. I was thinking about implementing datalog on top of Calcite - seems it's not such a crazy idea. Don't see a lof of docs around that module. Can it be used outside xtdb ?#2022-01-0919:38EugenFound something https://docs.xtdb.com/extensions/1.20.0/sql/ . Will check it out when I have some time#2022-01-0919:43refset> Can it be used outside xtdb ? Not currently, it can only be used to query data that has been indexed (via Datalog)#2022-01-0919:45refset> I was thinking about implementing datalog on top of Calcite - seems it's not such a crazy idea. Absolutely! There seems to be quite a bit of interest in that these days, e.g. https://github.com/EvgSkv/logica (note that the readme says "In the future we plan to support more SQL dialects and engines")#2022-01-0923:28Adam HelinsDear friends, I prepared this POC which aims to transcribe the Clojure ecosystem in a knowledge graph powered by Logseq: https://clojupedia.github.io/#/page/contents It is currently poor in content since this is only a crude prototype demoing the key ideas. It aims to offer visibility and discoverability of the Clojure ecosystem, libraries and miscellaneous tools. A powerful way of having a glimpse at the state of the ecosystem, how projects and libraries are related, linked, all of this complemented by a powerful search engine. Please, follow the "About" section and related links which explain what it is, how it works, and how it differs from previous attempts. Feedback welcome! I think it has the potential to evolve into a really powerful tool for Clojure devs if it becomes community-driven 🙂 Also an awesome opportunity to learn Logseq if you are not familiar with it. Attention, it may change your life. https://github.com/clojupedia/main#2022-01-0923:50Daniel SlutskyFantastic#2022-01-1007:34Jakub Holý (HolyJak)Awesome! So Logseq is like Royal our Athens but with (better?) task management and built - in querying and query -> view capabilities?#2022-01-1008:26Adam HelinsAthens is also a good bidirectional note taking app to recommend, without a doubt. It is less feature-rich but has a very good story for collaboration (within a team for instance). I picked Logseq because a Git based collaboration is well-suited for that kind of project and indeed, it has extra features that makes it perfect IMO for that kind of use case.#2022-01-1011:37Vladislavhi guys hope it helps 😃 https://my.mindnode.com/9a9kwhAnUszRCXxspTdeQnfGXtE6V2Ey3FiiyVZE#2022-01-1018:51robert-stuttafordthis is pretty damn cool, @UCFG3SDFV!#2022-01-1019:08An VuLogseq!!! ❤️#2022-01-1011:45vemvEastwood - code linter - https://github.com/jonase/eastwood/blob/Release-1.1.0/changes.md#changes-from-100-to-110 Eastwood turns 10 years! Celebrating with compatibility with the upcoming Clojure 1.11 release.#2022-01-1021:20Joshua Suskalohttps://github.com/IGJoshua/coffi version 0.3.298 is released! • Added a function for standard C-style layout rules with padding to add to structs • Fixed a bug with characters being read as UTF-16 instead of ASCII code points coffi is a Foreign Function Interface for Clojure on JDK 17 that's designed to make C-wrapper libraries easy to write and feel like native Clojure libraries.#2022-01-1021:49borkdudeCongrats! > And then adding `"org.suskalo/coffi"` to the `:config-paths` key in your `.clj-kondo/config.edn` file. This part is no longer needed since the last clj-kondo.#2022-01-1021:53Joshua SuskaloOh awesome, thanks!#2022-01-1113:34mpenetInitial (early) release of https://github.com/exoscale/lingo - a lib that extends spec explain-data and helps with formatting error messages from these extensions#2022-01-1114:41borkdudePerhaps a section on how it differs from expound could be useful?#2022-01-1114:43borkdudeWhen I try to load it with bb I get:
$ bb -cp $(clojure -Spath -Sdeps '{:deps {org.babashka/spec.alpha {:git/url "" :git/sha "1a841c4cc1d4f6dab7505a98ed2d532dd9d56b78"}}}') -e "(require '[exoscale.lin
go])"
----- Error --------------------------------------------------------------------
Type:     clojure.lang.ExceptionInfo
Message:  Cyclic load dependency: [ exoscale.lingo ]->[ exoscale.lingo ]
Why does the namespace load itself?
#2022-01-1114:45mpenethmm, odd#2022-01-1114:45borkdudeif I remove that it works:
$ bb -cp ... -e "(require '[exoscale.lingo :as l] '[clojure.spec.alpha :as s]) (s/def ::int int?) (l/explain ::int :foo)"
1 error found

:foo is an invalid :user/int - should be an Integer
#2022-01-1114:45mpenetclj-kondo didn't warn me about this one, your fault 🙂#2022-01-1114:46borkdudetouché :)#2022-01-1114:46mpenetI ll release a new version now#2022-01-1114:46mpenetyeah, it's intentionally no-dependency, runs in bb and I guess in cljs without too much trouble#2022-01-1114:47mpenetI didn't mention expound directly but I do mention that lingo is more data centric, expound works on explain and explain-str#2022-01-1114:47mpenetlingo focuses on explain-data and makes this the base for everything else#2022-01-1114:48mpenetexpound has no (exposed) intermediary data representation in short (afaik)#2022-01-1114:50borkdudecool#2022-01-1115:01mpenetanother thing, expound does not try to give a way to interpret predicates from the user side. Every custom message has to be applied on a registered spec and if/when that spec rejects a value it will just return that message, there's no predicate context#2022-01-1115:02mpenetno "parameterized" error if you want#2022-01-1115:03mpenetI wanted to have this added to expound but the author didn't like the idea. hence lingo#2022-01-1115:04borkdudeall makes sense#2022-01-1115:43ikitommilooks great! have you checked how this effects the js-bundle size?#2022-01-1115:45mpenetno clue, I am not even sure the current code runs in cljs (it should but I didn't test it). It's a very early release, in many ways, there are a lot of perf improvements that are possible left & right as well, the current impl. for pred parsing is quite naive for instance.#2022-01-1115:46mpenetbut all that will come in time#2022-01-1115:46mpenetplease don't benchmark it against malli now 🙂 that would hurt I am sure#2022-01-1205:46ikitommikeeping js-bundle size small is not easy, defs & multimethods can’t be DCEd and anything they use will be dragged in too, e.g. regex-schemas etc. Not a concern in most apps, but still a concern.#2022-01-1205:46ikitommiat some point, want an expound-grade prettier printer for malli too, current just Fipps out with colors, not marking errors / hiding details on large errors. Good to see more development in this space.#2022-01-1207:23borkdudeIf you want a small Js bundle then don't load spec(s) and move them to the side #2022-01-1208:52mpenetyeah, arguably that should be mostly for dev time usage in cljs, or cases where you just don't care.#2022-01-1208:53mpenetI thought about using fipp, but for now I like being dependency free. But I also know pprint is crazy slow, so we'll see#2022-01-1208:54mpenetit would be nice to have spec/select spec/schema as a library until spec2 settles (if ever), I suppose that could mitigate some of that#2022-01-1208:54borkdudethere are some tricks to remain dependency free + optional namespaces which, when loaded, register some "plugin" which, if available, can be used for certain features.#2022-01-1208:55mpenetyes I did use that in other projects, but not with cljs#2022-01-1208:55mpenetit's a bit hairy tho#2022-01-1208:55mpenetdepending on what the lib does and its size, just copying the code is often better imho#2022-01-1208:56mpenet(with attributions of course)#2022-01-1208:56borkdudeanother option is to provide the dependency function just an as argument option and you can program against some protocol#2022-01-1208:56mpenetyes#2022-01-1208:59borkdudeI do a similar plugin thing in #nbb where cljs.pprint is compiled into a different module than the rest of the stuff. So when you don't use cljs.pprint you don't load that 200kb of JS all the time. Everything is advanced compiled.#2022-01-1209:00mpenetI think I might just throw in a try requiring-resolve .... around fipp fn and be done with it#2022-01-1209:01mpenetwell, I need to check if requiring-resolve actually works with cljs#2022-01-1209:01borkdudeno#2022-01-1209:01borkdudeand it's not so good with graalvm native image either. This is a better approach: https://github.com/seancorfield/honeysql/pull/378/commits/e331ba0a0e44bec5da7e094f0c699181dd8d6cde#2022-01-1209:02mpenetthx for the pointer#2022-01-1209:03borkdudeI.e. do the resolving on the top level. For CLJS you will have to require people to load a namespace and in that namespace you can register whatever function you need. If that functions isn't available (due to the namespace not having loaded) then you assume the user doesn't want to use that dep.#2022-01-1209:03borkdudeCLJS namespaces are static.#2022-01-1209:04borkdudeAnd only top level ns forms (or require, but to simplify ignore this) are allowed#2022-01-1209:04borkdudeHere is another solution that works in both CLJ and CLJS: https://github.com/borkdude/dynaload#2022-01-1209:05borkdudebut I prefer the namespace solution, that simplifies things drastically and also works in babashka even.#2022-01-1209:06borkdude
(ns core-ns)
(def optional-function (volatile! nil))
(defn api-fn []
  (if-let [f @optional-function ...] ...))

(ns optional-ns (:require [core-ns] [pprint]))
(vreset! core-ns/optional-function pprint/pprint)
#2022-01-1209:07borkdudeREADME: to use pprint, require optional-ns in addition to core-ns.#2022-01-1209:29mpenetI ll have a look tonight if I can do something like that#2022-01-1209:33ikitommijust getting the humanized error messages from specs is actually useful in normal CLJS apps, e.g. with form validation. Seen libs like https://github.com/alexanderkiel/phrase used there.#2022-01-1209:36mpenetyeah, I have seen that one as well.#2022-01-1209:41mpenetI personally prefer to stay close/extend explain-data output, it's easier to port to it and also staying at the explain-data.problems[] level makes it easier to use in various contexts (web-form rows, cli, backend etc). But the more the merrier. All these libs are not a lot of code.#2022-01-1209:42mpenetThat said it would be nice if the focus/highlighting part could be shared#2022-01-1209:43mpenetthe ~^ stuff#2022-01-1209:43mpenetand possibly other bits#2022-01-1210:06ikitommiyes, the ^ stuff. did a placeholder repo 3y ago for just pretty error printing lib, but no time, have copy-pasted the same fipp-stuff between libs (reitit, malli). Modular, but incomplete (and works with expound) https://github.com/metosin/virhe#2022-01-1210:26mpenetthat one you mean? https://github.com/metosin/malli/blob/master/src/malli/dev/virhe.cljc#2022-01-1210:26mpenetyeah fipp api is quite nice for this#2022-01-1212:01ikitommiyes, that, here’s it in action: https://twitter.com/ikitommi/status/1480215765143932931#2022-01-1212:52emilaasaLooks real neat! Will try it out#2022-01-1211:59borkdudeThe #etaoin babashka pod has an update (last update was August 2021): It allows you to use etaoin from babashka scripts. Other than writing UI tests, I also use it together with a file-watcher to refresh the browser while I'm writing docs (see https://github.com/babashka/book/blob/master/script/watch.clj). • Add `wait` in `pod.babashka.etaoin` https://github.com/babashka/pod-babashka-etaoin/issues/11 (https://github.com/mprokopov) • Upgrade to etaoin 0.4.6 • Add `pod.babashka.etaoin.query/expand` https://github.com/babashka/pod-babashka-etaoin/issues/10 See https://github.com/babashka/pod-babashka-etaoin#run how to use it.#2022-01-1300:14bedersetaoin is pretty sweet! Glad to have it as pod now#2022-01-1300:59tony.kayReleased Fulcro RAD 1.1.2. https://github.com/fulcrologic/fulcro-rad • Adds support for custom form save mutations, and save parameters on forms • Fixes missing support in date/time formatting (on the js side) for literals in the timestamp (via ’) • Adjusts deps to fix tests due to the intentional NPM self-sabotage of colors.js#2022-01-1315:04borkdudeclj-kondo 2022.01.13: a linter for Clojure code that sparks joy clj-kondo • Add linter `:conflicting-fn-arity`: warn when an arity occurs more than once in a function that overloads on arity. https://github.com/clj-kondo/clj-kondo/issues/1136 (https://github.com/mknoszlig) • Add linter `:clj-kondo-config` which provides linting for `.clj-kondo/config.edn`. https://github.com/clj-kondo/clj-kondo/issues/1527 • Relax `:reduce-without-init` for functions known to be safe https://github.com/clj-kondo/clj-kondo/issues/1519 • Symbol arg to `fdef` can be arbitrary namespace https://github.com/clj-kondo/clj-kondo/issues/1532 • Improve potemkin generated var-definition analysis https://github.com/clj-kondo/clj-kondo/issues/1521 (https://github.com/ericdallo) • Stabilize cache version independent from kondo version https://github.com/clj-kondo/clj-kondo/issues/1520. This allows you to re-use the cache over multiple kondo versions. • :output {:progress true} should print to stderr https://github.com/clj-kondo/clj-kondo/issues/1523 • Only print informative messages when `--debug` is enabled. https://github.com/clj-kondo/clj-kondo/issues/1514 • Add Sublime Text instructions https://github.com/clj-kondo/clj-kondo/issues/827 (https://github.com/KyleErhabor) • Fix end location in anonyous function body https://github.com/clj-kondo/clj-kondo/issues/1533 • Bump datalog-parser to 0.1.9: allows symbol constants in datalog expression #2022-01-1316:20ericdalloAlready bumped clojure-lsp, should be available on next release!#2022-01-1318:04kipzJust released 0.0.1 of debian-version-clj - parser for debian-version strings https://github.com/kipz/deb-version-clj because I couldn't find any that worked for the JVM#2022-01-1318:09borkdudeCool! Are you also aware of version-clj? https://github.com/xsc/version-clj
user=> (require '[version-clj.core])
nil
user=> (version-clj.core/parse "6.0-4.el6.x86_64")
{:version [(6 (0 4) ("el" 6) ("x" 86 "_" 64))], :qualifiers #{}, :snapshot? false, :qualified? false}
#2022-01-1318:14kipzYeah, I saw that. You thinking there may be some way to integrate? The debian version scheme is pretty funky, so nobody would want to use it by default I would have thought - but we could come up with some way to choose the scheme I guess.#2022-01-1319:03borkdudecool make sense!#2022-01-1321:40Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.11.0-alpha4 is now available • https://clojure.atlassian.net/browse/CLJ-2673 Add abs, and update min and max to use Math impls when possible • https://clojure.atlassian.net/browse/CLJ-2555 Add iteration generator function • https://clojure.atlassian.net/browse/CLJ-2621 Fix unnecessary boxing of unused return in statement context for instance method expr • https://clojure.atlassian.net/browse/CLJ-2663 Fix vector = not terminating when called with infinite sequence • https://clojure.atlassian.net/browse/CLJ-2679 Fix hash collisions in case expressions on symbols • https://clojure.atlassian.net/browse/CLJ-2670 Use Math.exact…​ methods for checked long math ops for performance • https://clojure.atlassian.net/browse/CLJ-2680 Fix type hinting a primitive local with matching type hint to not error • https://clojure.atlassian.net/browse/CLJ-2234 Fix multimethod preferences using only global hierarchy • https://clojure.atlassian.net/browse/CLJ-2556 Fix into completion so halt-when works • https://clojure.atlassian.net/browse/CLJ-2665 Fix require with :as and :as-alias to load • https://clojure.atlassian.net/browse/CLJ-2677 clojure.math - fix method reflection in bodies and inlines, fix docstrings, renamed • https://clojure.atlassian.net/browse/CLJ-1379 clojure.test - fix quoting of :actual form in :pass maps • https://clojure.atlassian.net/browse/CLJ-2493 clojure.java.browse - fix browse-url hanging on call to xdg-open • https://clojure.atlassian.net/browse/CLJ-2611 clojure.xml - Stop processing XXE expansions by default • https://clojure.atlassian.net/browse/CLJ-2684 Update contrib deps to latest (spec.alpha, test.check, test.generative) We rely on the community's help in testing new alphas. If you do test your codebase with 1.11.0-alpha4, and can leave a or ::x: (hopefully with more info in the thread), that would be super useful.#2022-01-1323:29seancorfieldSo far I've opened issues against three libraries that define their own abs function now that clojure.core/abs exists and causes a warning.#2022-01-1323:44Alex Miller (Clojure team)yeah, that's inevitable (I updated test.check and math.numeric-tower)#2022-01-1323:48seancorfieldIn case anyone is interested, those three (so far) are: clojure.java-time, medley, and zprint.#2022-01-1323:53Alex Miller (Clojure team)the new abs in core is for real better in multiple ways (perf - reaches jvm hotspot intrinsics, polymorphism over all numeric types, portable when impl'ed in cljs)#2022-01-1323:54seancorfieldI updated the example in https://clojuredocs.org/clojure.core/halt-when to note that it works with into in Alpha 4.#2022-01-1400:00Alex Miller (Clojure team)the master api docs have been updated at https://clojure.github.io/clojure/branch-master/index.html if that's useful to anyone, new stuff in alpha4: • https://clojure.github.io/clojure/branch-master/index.html#clojure.math namespace - many new fns • https://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/abshttps://clojure.github.io/clojure/branch-master/clojure.core-api.html#clojure.core/iteration - more docs to come on this (and core.async variant) • https://clojure.github.io/clojure/branch-master/clojure.java.shell-api.html#clojure.java.shell/launch (added for the browse-url fix) • https://clojure.github.io/clojure/branch-master/clojure.xml-api.html namespace has some new stuff but really it's all there to give you options to fall back to prior behavior for XXE if you really need it (but it's a security issue and you probably don't)#2022-01-1400:05seancorfieldOur test suite passes without any issues on Alpha 4. It'll be up on our staging cluster soon for additional testing.#2022-01-1400:35phillThe new safeguard related to XML external entities is a breaking change! It will especially affect document-preparation apps dating from before the xlink era. Therefore, in the formal announcement, a nice prominent notice would be thoughtful.#2022-01-1401:24Alex Miller (Clojure team)This is just an alpha, there will be a release notes by the time we get to the RCs with more stuff like this#2022-01-1401:24Alex Miller (Clojure team)So, yes, there will be#2022-01-1406:47pez@UKC33JMU3 does this fix your issue with the ClojureScript repl start on Linux?#2022-01-1408:34borkdudeLooking forward to some examples of iteration#2022-01-1409:09brendnz@U0ETXRFEW, afraid not; I still have to use the custom connect sequence, but at least that still works.#2022-01-1411:49Lukas Domagalaall the tracing and introspection in omni-trace still works.#2022-01-1414:36imreNice one on all the reflection stuff, thank you Alex!#2022-01-1420:49seancorfieldWe have 1.11 Alpha 4 in production for two of our apps and several of our cron job processes.#2022-01-1509:16brendnz@U0ETXRFEW, it appears the best advice for Calva learners on Linux systems is to have the browser already open before using "fire up the ClojureScript Quick Start Browser REPL". My custom connect sequence, I have since learnt, is necessary for me only if my browser is not already open. I tested the "browser-already-open" scenario today after reading Andy Fingerhut's September 2, 2019 (https://clojure.atlassian.net/browse/CLJ-2493) post:
"I found that if you start [a browser], e.g., then start a Clojure REPL and eval a browse-url expression, the REPL prompt comes back quickly, as expected. Similarly if you start a Clojure REPL, then [a browser], then eval the browse-url expression.

The only case in which the eval of a browse-url expression does not quickly come back with a prompt is if [the browser] was not yet started, and eval'ing browse-url caused it to start."
You asked if 1.11.0-alpha4 helped me open the ClojureScript REPL, and my test showed it did not. I now know why you thought it might. It fixes "clojure.java.browse/browse-url hangs calling xdg-open", as @U064X3EF3, @U050ECB92, and @U050WRF8X mention in their video of today at https://www.youtube.com/watch?v=6vmTKoPzJUo&amp;t=5184s . Apparently, it has always worked if the browser is already open! Unless it was opened by a prior jack-in, as a new jack-in closes such an already open browser in my experiment; but not an independently opened browser. It takes 8 seconds on my machine for the browser page to load after the clj prompt appears in output.calvap-repl pane and then another 4 seconds for the cljs prompt to appear. So it takes 12 seconds to be sure the jack-in has not failed. @U04V70XH6 and @U0ETXRFEW , Alex thinks its "a weird little rabbit hole that most people never look at, never worry about, never think about", except us. Rounding to the nearest 10%, I think half the people use Clojure on Apple machines and half use it on Linux machines. I would have thought more Linux users would notice, if it were not for the fact they have their browsers already open nearly all the time. Sean, does 1.11.0-alpha4 fix it for you? Technically it does not fix it for me. Practically it does and I am very happy with the whole exercise. I just have to have my browser already open or use my custom connect sequence. Alex says "We rely on the community's help in testing new alphas. If you do test your codebase with 1.11.0-alpha4, and can leave a [tick]  or [cross] : (hopefully with more info in the thread), that would be super useful".   I am happy with attempted fix and want to leave a tick, but of course I need to leave a cross, as CLJ 2493 does not totally fix it for me, assuming my problem is actually the same problem. My system is Ubuntu 20.4 running in WSL2.
#2022-01-1511:14pez@UKC33JMU3 iiuc, the check/cross is rather about wether this build breaks something that previously worked or if some particular fix does not do what it states to do. There is probably an issue tracking the problem you hit (manifesting in problems with the ClojureScript Quick Start on Linux). To me it was just the long shot of an optimist that it was fixed with this alpha.#2022-01-1514:07Alex Miller (Clojure team)@UKC33JMU3 do you have a link to your issue? #2022-01-1521:46seancorfieldI can confirm that on Windows/WSL2/Ubuntu with google-chrome not open, the following command still hangs and does not show a prompt, even though the browser opens and shows the cljs welcome page:
$ clj -Sforce -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "RELEASE"}}}' -M:1.11 -m cljs.main -r
(the :1.11 alias brings in Clojure 1.11.0 Alpha 4). As @UKC33JMU3 observes, if you open google-chrome first, it works. It also works if you specify {:launch-browser false} in the REPL options, and then start the browser manually at the given URL (http://localhost:9000) per the caveat in the Quick Start. I don't know if there's an issue for this specific case (but having the browser open is likely to be common for Linux users in general I suspect -- but less common for WSL2 users (5% of Clojurians, according to the last State of Clojure survey).
#2022-01-1522:28phillHi all, the new clojure.java.shell/launch function deadlocks if the launched process writes to stderr or stdout beyond the OS' puny buffer. This is described in the Javadoc at https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Process.html, "Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the process may cause the process to block, or even deadlock." A workaround is to use ProcessBuilder, and .redirectError and .redirectOutput to java.lang.ProcessBuilder$Redirect/DISCARD before calling start.#2022-01-1522:30borkdudeOr use Inherit, depending on if you actually want to see the output or not.#2022-01-1522:30borkdudeI think this might also be a problem in tools.build process.#2022-01-1522:36brendnzHi @U064X3EF3, it has just been discussions with @U0ETXRFEW and @U04V70XH6. The following thread has a screenshot of what happened on my system. I was going to add screenshots from a discussion with Sean Corfield, but he has written a much better summary as I write this reply. The post at https://clojurians.slack.com/archives/CBE668G4R/p1641774856063000 shows the point at which :launch-browser can be set to false in Calva, and Sean (prior post) and the Quick Start page (below) shows where it can be set to false in the command line. I was going to suggest do you not think the solution is for the ClojureScript Quick Start page (https://clojurescript.org/guides/quick-start) to insert: "starting your browser first or" … where it says:
If you are running Linux and the REPL does not start, try [starting your browser first or] disabling browser auto-launch and opening  manually:
clj -M --main cljs.main --repl-opts "{:launch-browser false}" --compile hello-world.core --repl
  But we can take it from Sean's post that at least 5% of all new Clojurians will be hit by this problem, and I wonder if that would be insufficient. Just as I am about to post this, I see a couple of interesting posts just added by @U0HG4EHMH and @U04V15CAJ so far above my pay-grade I can only guess they contain possible solutions.
#2022-01-1605:11brendnzHi @U0HG4EHMH and @U04V15CAJ, what you say and refer to is interesting and no doubt spot on. Fancy the robustness of the system (Java processes communicating on Linux) being so fragile and dependent on contingent facts such as whether buffers are not cleared quick enough.#2022-01-2110:23Ivar RefsdalRe https://clojure.atlassian.net/browse/CLJ-2555 Add iteration generator function I've given this a spin, and find it to be working fine. Here is a https://gist.github.com/ivarref/41d4914b1ec3936ad83e0ed9a9c8517d demonstrating iteration over a https://relay.dev/graphql/connections.htm. The only thing I did not feel was quite "natural" was the need for mapcat identity. For my typical usage I would iterate over a single list/seq, not over pages and then over the page list. Should there be a iteration-cat version, or perhaps a :vcatf function? CC @U050ECB92 @U04V15CAJ#2022-01-2110:26borkdudeI'm not an expert by any means on this topic, but I wonder if @U050ECB92 has seen this article which highlights some potential problems with iteration . Just sharing it in case he hasn't seen it. https://github.com/leonoel/missionary/wiki/Iterative-queries#2022-01-2110:29borkdude@UGJE0MM0W Example looks neat! Looks like a great fit for your use case.#2022-01-2110:53imreInteresting links. What I don't really get in the one @U04V15CAJ linked is this statement: IReduceInit doesn't have these problems, but is not composable either (not in practice, at least). Why would IReduceInit not be composable?#2022-01-2116:41ghadi@UGJE0MM0W we have considered the catting aspect, in fact the core.async version has an arg :vsf (instead of :vf )#2022-01-2116:42ghadi(into [] cat (iteration step :vf ....) is a nice way to do that too. (Beware of side-effects + lazy-seq!)#2022-02-0220:10seancorfieldJust FYI, as a follow-up to my January 14th message above, we now have Clojure 1.11.0 Alpha 4 in production for all processes 🎉#2022-01-1422:12Carsten BehringA new release of , the idiomatic machine learning library for Clojure, is out. Changes in version 0.1.4 : improvement of the evaluate-models function by unifying the dissoc-in and handler-fn options. (breaking change) https://clojars.org/scicloj/scicloj.ml/#2022-01-1423:10hlship[ANN] com.walmartlabs/lacinia 1.1 and lacinia-pedestal 1.1 Lacinia is an open-source implementation of the GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ lacinia 1.1 is mostly focused on stability and performance improvements. lacinia-pedestal adds support for accessing Lacinia GraphQL as an HTTP endpoint GitHub repo: https://github.com/walmartlabs/lacinia-pedestal Documentation: https://lacinia-pedestal.readthedocs.io/en/latest/ lacinia-pedestal 1.1 A subtle bug in subscriptions was fixed. There is now support for caching parsed queries in memory.#2022-01-1709:38wotbrewHi all 👋, I'm pleased to announce an early alpha of relic is now available. 🎉 relic is an in memory database and data processing library with a closer-to-sql query dsl, constraints and incremental materialized views. I do not know if its a good, ok, or terrible idea - but I wanted something like this to exist so I could better find out. github: https://github.com/wotbrew/relic channel: #relic Questions, discussion (and contributions!) massively appreciated.#2022-01-1711:06Lukas DomagalaThis looks really interesting, great work! I know its still in alpha, so performance is probably still way worse than it could be. Disclaimers aside, how would the materialized views compare to something like re-frames subscribers? I know that replacing it with datascript is a lot slower, but this seems like more performant alternative.#2022-01-1711:11wotbrewI haven't published any benchmarks yet, but perf should be competitive with the competition, YMMV! Main things to be aware of would likely be memory usage and write performance if you materialize a lot of queries. Certainly a design goal is to be able to use relic with react and invalidate hooks / ratoms directly using tracked-transact. Relic is just a fancy signal graph itself so its quite natural to do this.#2022-01-1711:14wotbrewThe upper ceiling on perf tuning for something like this is basically 'write a compiler' so lots of room at the top.#2022-01-1711:17Lukas Domagalathank you for the quick reply. I’ll defiantly play around with it, looks very interesting.#2022-01-1711:29martinklepsch@U0GE2S1NH the usage with React is also something I’d be interested in, please keep sharing how that turns out 🙂#2022-01-1711:30wotbrewhttps://wotbrew.github.io/relic/change-tracking/#2022-01-1711:30wotbrewif you want to go down this rabbit hole happy to talk in #relic#2022-01-1711:30wotbrewI have a hacky demo of its use with reagent - I'd love to see somebody build a glue library that makes it a little less hacky. I don't currently spend a lot of time working on cljs ui's.#2022-01-1713:32Lukas DomagalaBTW, you mentioned that recursive queries aren’t implemented yet. Did you just not get around to it yet or is it going to be a really hard problem because of the signal graph cycles that would exist? just curious#2022-01-1713:45wotbrewI didn't get around to it. Its certainly tricky, but I think something can be done in the future.#2022-01-1716:04robert-stuttafordi love that folks don't consider this to be a solved problem, and keep coming up with new and interesting approaches to solving it. nice work @U0GE2S1NH!#2022-01-1716:06wotbrewthe curse of lisp I guess 🙂#2022-01-1716:07robert-stuttafordyou say curse, i say creative playground -sung to the tune of tomato, tomahto-#2022-01-1819:00metasoarousNice work @U0GE2S1NH! Excited to see this!#2022-01-1819:14metasoarous@U02EMBDU2JU > ...recursive queries aren’t implemented yet... is it going to be a really hard problem The math does indeed get quite a bit trickier for this. The typical trick used in for resolving recursive queries (recursively evaluating a rule till you reach a fixed point) is more or less the same trick used to perform incremental view maintenance, so you have to generalize the iteration from a well-ordered set of indices to a partial order (in other words, you don't just iterate over either data-update or recursive-rule-update, you have to iterate over both at the same time). The solution is differential view maintenance (differential dataflow/datalog/computation, etc). Frank McSherry et al have worked this out: https://www.microsoft.com/en-us/research/wp-content/uploads/2013/01/differentialdataflow.pdf#2022-01-1819:14metasoarousThis one is better at explaining some of the background theory: https://users.soe.ucsc.edu/~abadi/Papers/differential_revision-app.pdf#2022-01-1819:15metasoarousVery interesting stuff, but also requires quite a bit of additional machinery.#2022-01-1819:37wotbrewI read some of those papers, my brain is a bit too smooth for all the math but I believe it can be done. In my head I see a specialised data flow node that closes over the fixed point recursion and intermediate indexes. You won't just be able to recur anywhere like a madman, I imagine some kind of CTE-ish syntax#2022-01-1819:39wotbrewThanks for the links again @U05100J3V, will review when it's time. Would be super happy to take notes / ideas in an issue too!#2022-01-1819:49metasoarousYeah; The background is super heady stuff. This post may be helpful, since it's a bit more pragmatic, and assumes the underlying diff-dataflow machinery: https://github.com/frankmcsherry/blog/blob/master/posts/2016-06-21.md#2022-01-1819:51metasoarousIt would be amazing if we had something akin to the timely-dataflow library; Then this wouldn't be too much work at all. But that's actually a tall order.#2022-01-1819:53metasoarousI'd recommend chatting with @U8YCZLZH6, who built clj-3df (https://github.com/sixthnormal/clj-3df). They left all the dataflow stuff to Rust/timely-dataflow, and wrapped as a clj api.#2022-01-1820:07wotbrewThanks so much! I hope once the dust has settled and I figure out how good an idea it actually is, to have another pass at the internals and align it with the best-of-breed approach from timely#2022-01-1814:30kipzalpine-version-clj 0.0.1 has just landed in Clojars. Use it to parse and compare alpine/gentoo package version strings: https://github.com/kipz/alpine-version-clj#2022-01-1815:33mhjortclj-gatling version 0.17.0 is out! This version finally adds support for rate based simulations. Big thanks https://github.com/dancmeyers for implementing this long awaited feature. clj-gatling is a load testing tool. Write tests in clojure, get results back as clojure data or as graphical Gatling html reports. Tests can be run by specifying a concurrency or then rate per second (the new feature). https://github.com/mhjort/clj-gatling#2022-01-1815:34mhjortAlso added new channel #clj-gatling#2022-01-1817:21danm🎉#2022-01-1906:13robert-stuttafordahhhh nice to see this still going, i had a great time with this a couple years back!#2022-01-1908:22steveb8nMe too. I've been using it to test #holy-lambda in AWS. Really helpful so 👃#2022-01-1920:08quollAnnouncing Remorse: a library for converting keywords into morse code. This answers a suggestion by @lasse.olavi.maatta in response to @borkdude’s observation that ascii art is possible in keywords. Thanks to @p-himik for the name. https://github.com/quoll/remorse#2022-01-1920:09quollDespite @U064X3EF3’s admonitions, I refuse to have remorse for having created this#2022-01-1920:10fogus (Clojure Team)Feature request: emit keywords with the ascii codes for speaker beeps embedded in them#2022-01-1920:17slipsetVery disappointed in your naming skills. A var called a-z->morse which contains not only morse for a-z, but also for numbers and a limited set of punctuations.#2022-01-1920:18quollIt was originally only letters. I only learned for 0.0.2 that punctuation also existed!#2022-01-1920:18quoll@U050WRF8X, there’s \u0007. Are there any others?#2022-01-1920:19Alex Miller (Clojure team)seems like you changed horse midcourse without recourse#2022-01-1920:19Alex Miller (Clojure team)I'll see myself out#2022-01-1920:20quollWhat?!? There’s no :groan: emoji???#2022-01-1920:25R.A. PorterI feel like Alex telegraphed that joke.#2022-01-1920:28fogus (Clojure Team)@U051N6TTC I only know of (char 7) / \u0007#2022-01-1920:37quoll2 in a row might work for a dash. But I don’t know how to delay between successive dots and dashes#2022-01-1920:42fogus (Clojure Team)you could insert line-feeds -- the movement of the print head should be enough delay 😉#2022-01-1920:47quollOK… I now have a keyword: (def a (keyword "ab\u0007cd")) Every time the keyword is printed it makes a sound. It’s freaking me out a little bit :rolling_on_the_floor_laughing:#2022-01-2000:26seancorfieldcom.github.seancorfield/expectations {:mvn/version "2.0.156"} -- a clojure.test-compatible version of the classic Expectations library -- https://cljdoc.org/d/com.github.seancorfield/expectations/2.0.156/doc/readme -- follow-up in #expectations#2022-01-2004:49pfeodrippeHi version a851bce2caf83906d2bf4d4b8143b96739c34c60 (git sha) of https://github.com/pfeodrippe/pitoco was added. The ns pitoco.instrumentat was added, which allows you to infer schemas from your vars at runtime (using Malli + Spec Provider behind the scenes), it's just a convenience for your REPL-driven development. I've made a video testing the new feature with #cljdoc, you can see how it interacts with the REPL. See https://www.youtube.com/watch?v=MloJSCl38d0. One low-hang fruit would be to auto-generate documentation, improving the review in a PR with schemas and even examples from the tests (it's always good to ease the life of our reviewers).#2022-01-2005:56ikitommiHi, please update the malli dep, with the new m/provider, it's 10-100x faster now. Cheers.#2022-01-2006:06metasoarousThis is amazing.#2022-01-2006:06metasoarousWould it be possible to run instrument, as you did, and cache a static view of the generated mali schema (perhaps when you call a particular function)?#2022-01-2012:02pfeodrippe@U055NJ5CC I have tried to use the new version and I was having some NPEs, this is why I'm still using spec provider. I will open an issue soon in the Malli repo o/#2022-01-2012:09pfeodrippe@U05100J3V Yes, it's possible, every var returned by infer-schemas will have a :malli/schema metadata associated, which you can read and output to a file (as Malli is serializable) or create some doc from it, do whatever you need. See the m/=> macro in https://github.com/metosin/malli/blob/master/docs/function-schemas.md. Let me know your idea, we can add support right away in Pitoco if general enough o/#2022-01-2012:41Lukas Domagalareally cool idea to change the :doc meta. haven’t seen that done yet and it seems so obvious once you see it!#2022-01-2012:54pfeodrippeThanks, Lukas! It can be annoying if the schema is too long (but at least is at the bottom), it was the common denominator for inspection I have found which exists in our Clojure tooling#2022-01-2012:56Lukas DomagalaI feel your pain 🙂 thats why I’m currently working on a better way to provide that in calva. https://github.com/BetterThanTomorrow/calva/issues/1471 But as you said, it would be only one IDE.#2022-01-2116:06Lukas Domagala@U5R6XUARE not sure if you are interested, but the initial PR for that issue is out: https://github.com/BetterThanTomorrow/calva/pull/1492 Since you’d be one of the potential users for it I’d appreciate if you had a look.#2022-01-2116:42pfeodrippeThanks @U02EMBDU2JU! I will take a look, even I being a emacs user, it's good to know how the other tools are behaving so we can develop better developer tools o/#2022-01-2005:20tony.kayI’ve released 1.0.0-alpha8 of statecharts to Clojars. https://github.com/fulcrologic/statecharts I spent all day finishing up most of the missing bits. The library now supports a fully autonomous mode where statecharts can invoke other charts, multiple charts can be managed/started using a common env and can cross-communcate with events, etc. You can easily create new kinds of invocation processors, and the protocols make it relatively straight-forward to build distributed and long-running systems of state charts. The library is very close to the SXCML standard in terms of features and uses the exact implementation of that standard for the chart processing. There are new examples in the src/examples directory, and the documentation has been updated. WARNING: this required a refactoring on several of the protocols, which resulted in BREAKING CHANGES (I said it was alpha). See the CHANGELOG for details. The chart definition API didn’t change, just some of the details of starting/running them. This is probably the last alpha release, since the only major thing missing is a good rigorous bit of testing.#2022-01-2019:28ericdalloclojure-lsp Released https://clojure-lsp.io/ 2022.01.20-14.12.43 with a lot of new changes, check the gif for one of the exciting ones, you can now move coll entries via refactor commands with lsp without messing with your comments or brackets 🤯 🚀 Check #lsp channel for more information about all other new changes!#2022-01-2020:19quollIn case anyone didn’t understand that it was a joke last time, Remorse 0.1.0 has been released. This version supports symbol conversion. WARNING: Do not look at the code! https://github.com/quoll/remorse#2022-01-2020:20quollHow did this project get 18 stars???#2022-01-2020:22Ben SlessBecause it's fun!#2022-01-2020:24Ben SlessIs this the first "obfuscated clojure" library?#2022-01-2020:28respatializedThere is also swearjure but it's a separate interpreter rather than self-bootstrapped: https://github.com/hypirion/swearjure#2022-01-2020:29quollI remembered Swearjure as I was doing it#2022-01-2020:29quollI noticed that requiring the namepace was a little slow 🙂#2022-01-2020:32quollI’m particularly proud of the fact that it macros it’s way into having a standard ascii API. So all of the functions can be called normally:
string->morse
morse->string
keyword->morse
morse->keyword
symbol->morse
morse->symbol
#2022-01-2020:51lreadI dot dash was a joke! 🙂#2022-01-2021:10dpsutton-_...._.._...__.-.._.._-..._.-._.-_.-._-.--__.._...__.-_.--_._..._---_--_.__.-_-._-..__-.--_---_..-__.-_.-._.__.-_.--_._..._---_--_.#2022-01-2022:20emil0rBonus points for the name. Funny 😊#2022-01-2022:46quollThose points all go to @U2FRKM4TW. I renamed the project as soon as he suggested it#2022-01-2120:10Adam HelinsSome say it's a joke, I say it's beautiful!#2022-01-2120:18Ben SlessNext step is embedding a brainf* interpreter#2022-01-2021:29seancorfieldcom.github.seancorfield/honeysql {:mvn/version "2.2.858"} -- SQL as Clojure data structures -- https://cljdoc.org/d/com.github.seancorfield/honeysql/2.2.858/doc/readme -- follow-up in #honeysql • Adds honey.sql/map= to convert a hash map into an equality condition (for a WHERE clause). • Adds a :cache option to honey.sql/format to avoid re-parsing and re-generating complex SQL statements (Clojure only). • Adds more support for Google BigQuery: SELECT * EXCEPT .. and SELECT * REPLACE .. and ARRAY<> and STRUCT<> column types.#2022-01-2021:47Andrey BogoyavlenskyI'm excited to announce https://github.com/abogoyavlensky/automigrate 0.1.0, the database auto-migration tool for Clojure! If you would like to read more about it, please check the https://bogoyavlensky.com/blog/announcing-automigrate/, complete with an example and short description. 🙂#2022-01-2108:14Teemu KaukorantaAfter three years, a new release of ring-logger is here 😄 • Version 1.1.1 adds support for async ring handlers • Adds :status-to-level-fn, which allows you to control the logging level of HTTP status codes in wrap-log-response • Updates org.clojure/tools.logging dependency to version 1.2.3 https://github.com/nberger/ring-logger#2022-01-2113:59wilkerlucioPathom Viz 2022.1.21 is out! This release adds a long waited support for setting custom headers when setting up a connection via URL! It will also keep a record of the latest connections so you can reconnect with ease. Check it out at https://github.com/wilkerlucio/pathom-viz/releases/tag/v2022.1.21!#2022-01-2116:41markwI have just released a new update for cq (Clojure Query) - version 2022.01.21-16.20.00 , which adds XML support - and this is also my first time posting it on the Clojurians Slack. cq is a Command-line Data Processor for EDN, YAML, JSON, XML and other data formats. Essentially, it brings the joy of Clojure's threading macros to the command line. It is inspired by jq and jet but aims to provide a bit more support for transforming deeply nested data structures. https://github.com/markus-wa/cq#2022-01-2116:45borkdude@U0244CZ9LAF Awesome. I'll add you to the list of SCI projects here https://github.com/babashka/sci#2022-01-2116:49markwahh thanks! 😄 - yeah sci is such an amazing project, thanks a lot for building/maintaining it ❤️ - it really does all of the heavy lifting for cq! 🙂#2022-01-2117:18borkdude
$ echo '[1 2 3]' | ./cq -i edn -- '->> (s/transform [s/ALL] inc)'
[2 3 4]
#2022-01-2117:18borkdudeit works :)#2022-01-2117:35markw🥳 - note that thread-last is actually the default 🙂 - so echo '[1 2 3]' | ./cq -i edn -- '(s/transform [s/ALL] inc)' works as well!#2022-01-2117:37borkdude@U0244CZ9LAF Is there a way I can just evaluate regular clojure without a threading macro? like
echo '[1 2 3]' | ./cq -i edn -- "(require '[com.rpl.specter :refer :all]) ..."
#2022-01-2117:39IvanI guess the -i input format matches the output. It would be interesting to have a -o option to define the output separately. So, read in a structure in the defined format, process it, and output as a potentially different format.#2022-01-2117:40markwin theory you can do
echo '[1 2 3]' | ./cq -i edn -- "#| (do (require '[com.rpl.specter :refer :all]) (identity .))"
but that gives Could not find namespace com.rpl.specter
#2022-01-2117:40IvanI'm thinking of borkdude's question as whether it is possible to extend the operations possible on the data#2022-01-2117:40markw@U8ZE1VBSS actually the output always defaults to edn - I use it often to just convert from JSON to EDN by doing cat file | cq#2022-01-2117:43markwyou can define vars & functions like this - there might be a way to make this a bit nicer, but so far I haven't done this myself so I'm just thinking about it now
echo '[1 2 3]' | cq -i edn -- "#| (do (def x identity) (x .))"
if you have suggestions on what would be a good syntax let me know and I can try to see if we can make that work 😄
#2022-01-2117:47markw@U04V15CAJ if I do {:namespaces {'s {...}}} in sci - I should be able to then (require '[s :refer :all]) - no? (currently getting Could not find namespace s) If I can figure that out then it should be possible to do what you're looking for 🙂#2022-01-2118:24borkdudeI'll be back in 30 minutes to explain :)#2022-01-2118:39borkdude@U0244CZ9LAF So, this works:
echo '[1 2 3]' | ./cq -i edn -- "#| (do (require '[s :refer :all]) (ns-publics 's))"
#2022-01-2118:40borkdudebut it might be better to add the namespace com.rpl.specter and alias that as s in the user namespace#2022-01-2118:41borkdudeThere is also an :aliases {'s 'com.rpl.specter} option#2022-01-2118:58markwahh, amazing! thanks for elaborating 🙂 - I will try to make the required changes early next week! I'm thinking I'll go with the aliases approach#2022-01-2615:38markw^ I've implemented the aliases solution now, thanks for the hint!#2022-01-2615:43borkdudesuper!#2022-02-0218:47jlmrReally enjoying cq so far, thanks for making this!#2022-02-0412:54markwglad to hear! @U56R03VNW 🙂#2022-01-2119:39hlshipio.github.hlship/test-pipeline. 0.1 test-pipeline is a small (very small!) library that can be used to improve your Clojure test suite, by breaking test code into composable, reusable steps. https://github.com/hlship/test-pipeline#2022-01-2120:18Carsten Behringpppmap 1.0 was released It is a small library which adds progress logging and partitions to map and pmap In 1.0.0 the logging happens via tap> now https://clojars.org/pppmap/versions/1.0.0#2022-01-2221:56uochanJust released antq ver 1.4.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Added a option to download upgraded dependencies at the same time as a convenience.#2022-01-2316:03ikitommi[metosin/malli "0.8.0"] is out! #malli is a data-driven data specification library for Clojure/Script. Changes since 0.7.0: • Development-time tools work now with ClojureScript 🥳 • Clj-kondo can load user-defined malli type configs automatically • ! defaults to use the pretty printer • Support for Plumatic-style inline schema-definitions via malli.experimental/defnmalli.destructure for parsing and unparsing Clojure (1.11) destructuring forms • malli.destructure/infer to infer function schemas from Function Var arglists • Expound-style pretty printing of validation errors via .pretty/explainmalli.provider can infer :tuple, :map-of, :enum & any simple schema via transformers • BREAKING: local registries are stored as identity, not as form • New options to define transformers via schema properties • Small fixes and improvements Big thanks to all contributors, and to Clojurists Together for sponsoring the development. https://github.com/metosin/malli#2022-01-2410:34souenzzowhat changed in 1.11 destructuing?#2022-01-2411:48ikitommithis one https://clojure.org/news/2021/03/18/apis-serving-people-and-programs#2022-01-2411:50ikitommiIn Malli, option to pass in map is basically [:alt [:map ..keys..] [:cat [:* ..kw-tuples..]]].#2022-01-2322:13djbluePortal https://github.com/djblue/portal/releases/tag/0.20.0 is now out! With this release, you can now specify a `:value` for portal to open. In the case of static data, portal behaves as it did previously. With atoms, it will automatically deref and update the UI when the atom changes. This new feature with the hiccup viewer make it very easy to throw together live development dashboards. Also, special thanks to https://github.com/BrianChevalier for all the awesome contributions in this release!#2022-01-2322:15djblueIs an example of how I've been using the open feature to debug portal with portal 💯#2022-01-2322:16djblueAnd the https://github.com/djblue/portal/blob/master/dev/portal/setup.cljs#L38-L59 to do it is pretty minimal.#2022-01-2402:27Joshua Suskalocoffi v0.4.341 is out! New in this version are extra functions and vars provided for high-performance (de)serialization when you know the exact types involved at development time, non-native byte orderings for primitive types, and a couple bug fixes for wrapper functions. https://github.com/IGJoshua/coffi#2022-01-2416:04borkdudeEnjoyed the podcast as well.#2022-01-2417:00Joshua SuskaloThanks!#2022-01-2501:44Sam RitchieI’ve just released v0.21.0 of the #sicmutils computer algebra system! This release adds a fast, well-tested https://cljdoc.org/d/sicmutils/sicmutils/0.21.0/api/sicmutils.quaternion, many performance improvements and doubles down on transducer-compatible “functional folds”. Highlights: • Quaternion https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/quaternion.cljc and https://cljdoc.org/d/sicmutils/sicmutils/0.21.0/api/sicmutils.quaternion • Many https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/special/factorial.cljc • A https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/algebra/fold.cljc#L35, ie, transducer-compatible reducing functions, including folds for https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/polynomial/interpolate.cljc#L541, https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/rational_function/interpolate.cljc#L234 and https://github.com/sicmutils/sicmutils/blob/main/src/sicmutils/polynomial/richardson.cljc#L399 Sponsor link, if you want to support this work ❤️: https://github.com/sponsors/sritchie Clojars: https://clojars.org/sicmutils/sicmutils detailed release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.21.0 Cljdoc: https://cljdoc.org/d/sicmutils/sicmutils/0.21.0 Cheers!#2022-01-2515:04borkdudeBabashka 0.7.4 is now released 🎉 https://babashka.org/ Please leave some feedback in the survey if you are using it. https://forms.gle/ko3NjDg2SwXeEoNQ9 • Add new namespace from clojure 1.11: `clojure.math` • Add new vars from clojure 1.11: `abs`, `iteration` • Add compatibility with `org.clojure/algo.monads` • SCI: support `:as-alias` • SCI: add `pop!` (https://github.com/kbaba1001) • deps.clj: update to clojure CLI 1.10.3.1058 • Add metabom jar to docker images https://github.com/babashka/babashka/issues/1133 (https://github.com/kipzhttps://github.com/lispyclouds) • Add opencontainers annotations to docker image https://github.com/babashka/babashka/issues/1134 (https://github.com/kipzhttps://github.com/lispyclouds) • Fix Alpine Linux Docker images in CI script https://github.com/babashka/babashka/issues/1140 (https://github.com/kipzhttps://github.com/lispyclouds) • babashka.fs: create dirs in `copy-tree` (https://github.com/duzunov) • SCI: fix order of metadata evaluation (https://github.com/erdos) • Fix: cannot take value of macro of `->` • Fix https://github.com/babashka/babashka/issues/1144: cannot create multidimensional arrays • Fix https://github.com/babashka/babashka/issues/1143: allow optional (ignored) `--` when using using `--main` (https://github.com/grzm) • SCI: throw when `recur` is used from non-tail position • Add more libraries to CI lib tests (https://github.com/cljwalker) • Upgrade several built-in deps: `org.clojure/clojure`, `cheshire`, `core.async`, `test.check`#2022-01-2522:12plexusOrnament 0.3.30 is out. Ornament provides a syntax for writing "styled components" (Styles + Hiccup) in Clojure/ClojureScript. This release improves ClojureScript support, and has a significantly expanded README. https://github.com/lambdaisland/ornament#2022-01-2620:39Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.1069 is now available (just a maintenance release, nothing interesting): • Update some Maven transitive deps to address some CVEs • Update to tools.tools v0.2.5 • Add check to error on invocation of multiple exec functions • Use tools.deps.alpha 0.12.1120 #2022-01-2716:52mkvlrWe’ve just released io.github.nextjournal/clerk {:mvn/version "0.5.346"} on Clojars. It’s a BIG update. Highlights are various improvements to the viewer api: • 🏞️ https://snapshots.nextjournal.com/clerk-demo/build/bd74d652a8dddbdddb42b62fe8043cf1f4b4e65d/notebooks/images.html for `java.awt.image.BufferedImage` with automatic layouting. • 🪆 https://snapshots.nextjournal.com/clerk/build/b9f35eb58a32f9b13d50d74143b9e2418dd2d1db/index.html#/notebooks/viewers_nested.clj inside e.g. `html` or `table` viewers. • 🤕 https://snapshots.nextjournal.com/clerk/build/cddd487c37b26e872b1a56bb2a0959b05cbfc0b0/index.html#/notebooks/viewer_api_meta.clj. Clerk’s viewer api has been based on functions that modify the result. This can be undesired if you want to depend on the unmodified value downstream. You can now alternatively use metadata using the `:nextjournal.clerk/viewer` to convey the viewer. Valid values are viewer functions or keywords. The latter is useful when you don’t want a runtime dependency on Clerk. • 🎰 https://github.com/nextjournal/clerk/commit/567bf29908d83490b823f0c4d87ebb3bd0837508 to semantically limit how much data is sent to the browser. There’s a lot more in the https://github.com/nextjournal/clerk/blob/main/CHANGELOG.md#05346-2022-01-27. Follow-up in #nextjournal#2022-01-2803:41wilkerlucioPathom 3 2022.01.28-alpha is out, this release includes: • Improve optimization for single item branch, now support moving run-next to the child's edge • On union process, in case the item doesn't match any branch its turned into nil (and removed in case of union sequences) • Fix bug when checking for entity required data, OR cases could trigger a false positive#2022-01-2817:00Jakub Holý (HolyJak)https://github.com/holyjak/clj-tumblr-summarizer v1 adds the ability to create monthly summaries of the backed up posts in HTML, e.g. to posts on a blog. clj-tumblr-summarizer is a tool / library that progressively backs up posts from a http://Tumblr.com micro-blog and can produce monthly summaries of the published posts in HTML. Can be run as a scheduled GitHub Action.#2022-01-2817:43Joshua Suskaloawesome, now I can consume more pukicho content and get the fuzzy feeling of running clojure to do it#2022-01-2822:25plexuslambdaisland/uri 1.13.95 is out, which fixes a potential stack overflow when normalizing URLs with very large query params. lambdaisland/uri is a cross-platform idiomatic URI library https://github.com/lambdaisland/uri#2022-01-2920:58nnicholshttps://github.com/nnichols/clojure-dependency-update-action is now ready for use on GitHub! This GitHub action uses antq to check for outdated dependencies and updates them for you. Updates include: • Fixes for multi-directory projects/monorepos • Commit messages for dependency updates now link to the GitHub diff between the old and new version (Thanks to some awesome new functionality in antq) • Support for most modern clojure dependency files (deps.edn, project.clj, shadow-cljs.edn, pom.xml) The last note leads to a secondary announcement: nnichols/leiningen-dependency-update-action is now slated for deprecation, since both actions shared an identical API and the first now also handles Leiningen projects. It will stay online in its current state to prevent anyone’s pipelines from breaking, but I do highly recommend upgrading since it only requires a simple substitution.#2022-01-2921:19nnicholsIf you’re reviewing you Clojure pipelines on GitHub, you may also be interested in https://github.com/nnichols/clojure-lint-action The above runs clj-kondo for you and pipes the results through ReviewDog to create PR comments for linter findings#2022-02-0213:58plexusdo you have any examples of what a PR looks like created by this action?#2022-02-0215:02nnichols@U07FP7QJ0 - The clojure-lsp project uses this action, and it opened a PR this morning: https://github.com/clojure-lsp/clojure-lsp/pull/743#2022-02-0216:27plexusSeems it adds a bunch of extra newlines to the pom.xml 🙈 tools-deps used to have a similar problem but they fixed it quite some time ago IIRC#2022-02-0217:13nnicholsAntq performs the actual update, so I can check to see how the edits are performed. It may be the same root cause#2022-01-2921:45mike_ananevA new version of the library project template is out. This version uses deps-new, build-clj instead of clj-new and depstar https://github.com/redstarssystems/libtemplate#2022-01-3113:16flowthingA new version (v0.12.0, still alpha) of Tutkain, a Sublime Text package for interactive Clojure development, is out. Note that this version removes all default key bindings, including indentation on Enter and the small number of ParEdit key bindings Tutkain had enabled by default. For instructions on how to restore those key bindings, see here: https://github.com/eerohele/Tutkain/blob/3412f53c077afb511f39574cbc95f9a323b59fec/messages/0.12.0.txt#L21-L185 Other than that, some highlights: • Support for using a panel instead of a view for REPL output • Panels hide when you press Escape and show up when you evaluate something, so they're useful especially when working on a laptop screen • If you like using inline evaluation results, you might prefer a panel over a regular view • Support for copying evaluation results to clipboard • Support for connecting to a Clojure runtime without spinning up a separate socket channel for editor tooling messages • Pass backchannel: false to tutkain_connect to use • Useful when one socket connection is all you can get (e.g. when connecting over an SSH tunnel) Full changelog: https://github.com/eerohele/Tutkain/blob/master/CHANGELOG.md#0120-alpha---2022-01-30 Documentation: https://tutkain.flowthing.me Follow up in #tutkain (or via GitHub issues).#2022-02-0108:39serefayarANN: ayatori is an experimental LRA Coordinator (a.k.a saga coordinator) to manage distributed transactions across microservices. It tries to follow (not completely) Eclipse Microprofile LRA Spec. It's not released and it's not ready for production usage, yet. (developing just for fun) https://github.com/serefayar/ayatori#2022-02-0109:35vlaaadNew release of reveal Reveal is out! https://vlaaad.github.io/reveal/ 1.3.265 now provides a built in Vega view. Reveal Pro 1.3.330 adds Vega Forms that allow creating Vega(-Lite) visualizations and learn Vega language in a helpful interactive UI. Follow up in the thread here or in #reveal channel.#2022-02-0109:36vlaaadI also wrote a post in my blog about it — https://vlaaad.github.io/reveal-vega-and-data-dsls#2022-02-0214:51oliyHi everyone, martian 0.1.20 has been released. martian is a library providing abstraction over your http client, supporting Swagger, OpenAPI and your own custom definitions. https://github.com/oliyh/martian This release adds support for: • martian-cljs-http-promise - support for the https://github.com/oliyh/cljs-http-promise http client for cljs • Specifying options for the Swagger GET request when bootstrapping, https://github.com/oliyh/martian/pull/123 thanks https://github.com/AndreaCrotti This release fixes: • Bump cheshire and fix jackson https://github.com/advisories/GHSA-xmc8-26q4-qjhxhttps://github.com/oliyh/martian/pull/127 thanks https://github.com/RickMoynihan #2022-02-0218:24bederswhat a coincidence. Was looking for this library and couldn't recall the name...something with m.....;)#2022-02-0215:45pezHere's a project repository meant to lure you into the rewarding world of Clojure prime sieving. Will we meet down the rabbit hole? https://github.com/PEZ/on-the-code-again-eratosthenes#2022-02-0218:17Alex Miller (Clojure team)Created #transit for discussion of the transit format and its implementations...#2022-02-0219:48borkdudepod-babashka-buddy: a babashka pod around the buddy library v0.1.0 - this allows you to use the buddy library directly from #babashka scripts. https://github.com/babashka/pod-babashka-buddy This is the first update since a little over a year. A lot more namespace were exposed now, with the help with @cap10morgan. An example:
(require '[babashka.pods :as pods])
(pods/load-pod 'org.babashka/buddy "0.1.0")
(require '[pod.babashka.buddy.core.hash :as hash])
(hash/md5 "foo")
Check https://github.com/babashka/pod-registry for other available pods.
#2022-02-0221:34Alex Miller (Clojure team)https://clojure.org/releases/devchangelog#v1.11.0-beta1 is now available • https://clojure.atlassian.net/browse/CLJ-2690 Improve iteration docstring and arg names • https://clojure.atlassian.net/browse/CLJ-2689 Fix clojure.math tests to be more tolerant of floating point comparisons • https://clojure.atlassian.net/browse/CLJ-2685 Fix iteration generative test failure • https://clojure.atlassian.net/browse/CLJ-2529 Fix incorrect reporting of runtime errors as compiler errors in calls through Compiler.load()https://clojure.atlassian.net/browse/CLJ-2620 Fix asymmetric handling of :exception :vals in prepl • https://clojure.atlassian.net/browse/CLJ-1180 Fix resolution of class type hints in defprotocolhttps://clojure.atlassian.net/browse/CLJ-1973 Make order of emitted protocol methods in generated classes reproducible • Rolled back prior change for https://clojure.atlassian.net/browse/CLJ-2493https://clojure.atlassian.net/browse/CLJ-2493 clojure.java.browse - Fix browse-url hanging on call to xdg-open (new change is more targeted and addresses more cases) As usual, we request your help in getting feedback about this release! If you run your test suite with it, please tag this post with or and leave feedback if the latter.#2022-02-0222:08borkdudeFWIW, all bb tests are passing with beta1 and you can get it with:
$ bash <(curl ) --version 0.7.5-SNAPSHOT --dir .

$ ./bb doc iteration
-------------------------
clojure.core/iteration
([step & {:keys [somef vf kf initk], :or {vf identity, kf identity, somef some?, initk nil}}])
...
#2022-02-0222:11dpsuttonSuccessful test run. Warnings about: • abs: java-time, clojure.math.numeric-tower,medley, taoensso.encore, kixi.stats.match • update-keys & vals: clojure.tools.analyzer.utils, clojure.tools.analyzer, clojure.tools.analyzer.passes.uniquify (just providing information about warnings we got in case those libs need to be patched.)#2022-02-0222:11Alex Miller (Clojure team)there is a new version of numeric-tower out there with that warning fixed (0.0.5) - but really you should be substantially better off not using numeric-tower for this#2022-02-0222:11Alex Miller (Clojure team)and ditto tools.analyzer in 1.1.0#2022-02-0223:33seancorfieldOur test suite passes with Beta 1 -- so no regressions from Alpha 4 (which we have in production). Beta 1 will go into production whenever our next production build happens.#2022-02-0308:56brendnzThe new CLJ-2493 works for me! Thankyou @U050WRF8X, @U064X3EF3, and @U04V70XH6. {:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "abc9d9cec5cfc5d1ebf8ded9cdcac8cee9c4c4c0"}, :content ("[email protected]")} Downloading: org/clojure/clojure/1.11.0-beta1/clojure-1.11.0-beta1.pom from central Downloading: org/clojure/clojure/1.11.0-beta1/clojure-1.11.0-beta1.jar from central Clojure 1.11.0-beta1 user=> {:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "94f6e6f1faf0faeed4c7e1e6f2f5f7f1d6fbfbff"}, :content ("[email protected]")} ClojureScript 1.10.844 cljs.user=> (+ 1 1) 2 cljs.user=> (js/alert "hi") nil cljs.user=>#2022-02-0309:24kingmobI think the iteration docstring could be further improved. If k is not a key but a “token”, why not use names like tokf and init-tok? The use of k for something that’s not a key seems non-idiomatic.#2022-02-0309:25brendnz@U0ETXRFEW, I note only for completeness, for an Ubuntu on WSL system like mine, the browser still needs to be open before running "Fire up the ClojureScript Quick Start Browser REPL", but that is no problem, at least for a user on that system who knows to have a browser open beforehand. Edit: Um, it seemed ok to continue my comment on CLJ-2493 here, but sorry, I now think not.#2022-02-0311:54EugenDoes https://clojure.atlassian.net/browse/CLJ-1973 help with Debian reproducible builds of Clojure ?#2022-02-0313:31Alex Miller (Clojure team)Possibly, but that was not tested#2022-02-0221:59Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.10.3.1075 is now available • https://clojure.atlassian.net/browse/TDEPS-216 - Built-in :deps alias should remove project paths from classpath • Improve error if git sha is not found in git repo • Improve prep error if transtive dep’s prep function is unresolvable • Bump AWS deps to latest versions • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.12.1135#2022-02-0307:20seancorfield@U064X3EF3 I updated to 1.10.3.1075 and I'm not sure that TDEPS-216 was included? I looked in the brew-install project and didn't see any relevant update (the root deps.edn file does not have this change). I do see it in tools.deps.alpha so I guess it is included but now the root deps.edn file in brew-install doesn't match the resource in t.d.a?#2022-02-0307:23seancorfieldThe confusion:
(! 514)-> clojure -Sdescribe
{:version "1.10.3.1075"
 :config-files ["/usr/local/Cellar/
No :replace-paths [] in there.
#2022-02-0314:24imreNot sure how it's set up but the case I reported for TDEPS-216 works now#2022-02-0314:24imrehttps://clojurians.slack.com/archives/C6QH853H8/p1643624068729959#2022-02-0314:26imre
; clojure -Srepro -version
Clojure CLI version 1.10.3.1075
; echo '{:paths ["src"] :deps{org.clojure/java.classpath {:mvn/version "1.0.0"}}}' > deps.edn
; mkdir src && echo '(ns user (:require clojure.java.classpath))' > src/user.clj
; clojure -Srepro -X:deps list :license :none
org.clojure/clojure 1.10.3
org.clojure/core.specs.alpha 0.2.56
org.clojure/java.classpath 1.0.0
org.clojure/spec.alpha 0.2.194
#2022-02-0314:26imreThanks for the fix @U064X3EF3#2022-02-0314:30Alex Miller (Clojure team)@U04V70XH6 I can update that one too but it's not used anymore, it's just there for any legacy tools that pulled it explicitly. the root deps.edn is used as a resource from the tools.deps lib#2022-02-0314:38Alex Miller (Clojure team)maybe I should just extract the resource so there's no "copy" there#2022-02-0222:34miltHey folks! Yet is doing some SSO-related work and we’ve just released two small libs for use with OpenID Connect and (certain) Clojure(Script) stacks: • https://github.com/yetanalytics/re-oidc 0.0.1 - A re-frame wrapper for https://github.com/IdentityModel/oidc-client-jshttps://github.com/yetanalytics/pedestal-oidc 0.0.2 - Pedestal interceptor + utils for handling OIDC tokens & discovery re-oidc contains an https://github.com/yetanalytics/re-oidc/blob/main/README.md#interactive-development--demo where you can spin up a Keycloak instance, API server and Figwheel front-end to see it all working in concert.#2022-02-0315:39AkizHi everyone, I am not sure if this is the right place. But I’ve released a tool for moving data from Google Bigquery to Postgresql. You may find this useful for controlling your cost or just local development. Really niche 🙂 https://github.com/zikajk/bq2pg#2022-02-0315:41lukaszhuh, I need something like this :-)#2022-02-0315:43Akiz@U0JEFEZH6 Great, if you miss / dont understand something, please ask. It is still rough (but battle-tested) 🙂#2022-02-0315:45lukaszI'll bookmark it for sure, at some point my team will have to move off BigQuery so this will help us a lot (not my choice, I'd keep using it)
#2022-02-0318:22Scott GriffinAs a fellow Clojure/ClojureScript developer and software engineer, I thought some of you might be interested to hear of an app I and my friend recently built and released. “Recap: Catch Every Word” makes it easy to do voice/speech recognition and transcribe audio content from over 70 different languages and dialects. It's great for podcasts and interviews, and if you know a second language from time spent in another country or multi-lingual education, and you have audio recordings in that language, more likely than not Recap can support transcribing that audio content and even produce closed captions for uploading into videos. The api endpoints were written entirely in ClojureScript, and compiled with shadow-cljs. Many thanks to @foo and @thheller for their helpful tips on interop and shadow-cljs setup. Check it out on the iOS App Store at https://apps.apple.com/us/app/recap-catch-every-word/id1592617977 and on the Google Play Store at https://play.google.com/store/apps/details?id=com.griffinscribe.recap The app is still in its early stages, so any feedback or feature enhancement requests or bug reports through the app interface would be helpful.#2022-02-0321:31pabloreGreat work! I love to see success stories with clojure and firebase#2022-02-0323:42phronmophobicViscous: pprint that respects your space and time code: https://github.com/phronmophobic/viscous try it: https://phronmophobic.github.io/viscous/#2022-02-0409:43Adam HelinsLooks interesting, I've been looking for an online EDN explorer#2022-02-0412:32oxalorg (Mitesh)We've cut a small new release of Kaocha, which fixes --watch on latest OSX / ARM machines 🎉. • https://github.com/lambdaisland/kaocha/pull/268 Changed default watcher to "Beholder" (https://github.com/nextjournal/beholder) which supports OSX/m1 machines natively. Hawk is now deprecated and will be removed in a future release. • For those who still want to use Hawk for some reason, added a configuration :kaocha.watch/type which takes either :beholder or :hawk as values. Defaulting to :beholder as the new fs watcher. ◦ If you are ^this, then please message me or in #kaocha on the use case which still requires hawk • https://github.com/lambdaisland/kaocha/pull/269 Add --no-fail-fast CLI option [thanks to @jshaffer2112] https://github.com/lambdaisland/kaocha#2022-02-0414:45Lucy WangAnnounce shadow-test-utils , which provides some goodies when writing tests in shadow-cljs: 1. A prettified browser test reporter 2. A way to only run (or exclude) tests like kaocha https://github.com/lucywang000/shadow-test-utils/#2022-02-0414:49p-himikLooks nice! Curious - why does it need to be included before shadow-cljs? If I'm not mistaken, overriding namespaces works only if your override is later on the classpath than what you're overriding.#2022-02-0510:28Lucy Wangemm, I think the rule of classpath resolution is the first one is being used. I'll double check it anyway, thanks!#2022-02-0510:35p-himikOh, you're right! And now I wonder how on Earth have I never been bitten by it.#2022-02-0420:11Alex Miller (Clojure team)https://github.com/cognitect/transit-java 1.0.362 is now available (https://github.com/cognitect/transit-java/blob/master/CHANGES.md#10362--2022-02-04)#2022-02-0420:12Alex Miller (Clojure team)https://github.com/cognitect/transit-clj 1.0.329 is now available (https://github.com/cognitect/transit-clj/blob/master/CHANGES.md#10329--2022-02-04)#2022-02-0518:36mike_ananevInitial release for Application project template. This version migrated to `deps-new`, `build-clj` . All workflow is based on babashka . This template will give you the following basic project workflow:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "97fafefcf2d7faf5e7a7a5"}, :content ("[email protected]")}
https://github.com/redstarssystems/apptemplate
#2022-02-0712:36pfeodrippeIf you have been using https://github.com/pfeodrippe/pitoco to infer Malli schemas for your Clojure code, a complementary tool was released, https://marketplace.visualstudio.com/items?itemName=feodrippe.pitoco-extension&amp;ssr=false#overview (https://github.com/pfeodrippe/pitoco-vscode-extension). This extension leverages information that you produced when inferred the schemas, allowing you to visualize data at your VSCode environment. It works with the web version of VSCode (https://vscode.dev), the main use case is that you have committed Pitoco schema files generated by pitoco.instrument/store-instrumented-vars! (locally or from your CI) and, for example, when you are reviewing a PR, you press . and then you can hover over your var anywhere and have schema + examples right away without the need to specify any of them beforehand, everything is collected from runtime. It's simple and rough right now, but take a look, report an issue, open a PR o/ See a short video about it at https://www.youtube.com/watch?v=H1An2edqiJk.#2022-02-0712:42borkdude@U5R6XUARE That's awesome! I've been thinking about something like this for clj-kondo as well. It could generate an HTML view or overlay for code with references to other vars, etc.#2022-02-0712:42borkdudeSimilar to how github has some navigation features for some popular languages, but unfortunately not clojure#2022-02-0712:47pfeodrippeYes, exactly!! I was thinking in creating some web view first, but hover was simpler. Clj-kondo could benefit a lot from it, I like the idea!! The extension is made in cljs, I have missed the REPL ahahaha#2022-02-0712:48borkdudeI mean, the clj-kondo analysis can be exported to JSON and then be shown in this JS extension or so#2022-02-0712:51borkdudeI have asked Github on Twitter once if they would support something like this for their UI: just some files in the repo with information about the code which can be used by their navigation,etc feature#2022-02-0712:51borkdudeBut they were adamant that everything was implemented in terms of treesitter#2022-02-0712:52pfeodrippeYes yes, it would be great! One issue I was having is where to store this information, at the moment it reads locally from a committed file, but I am thinking in adding supported for S3 so people can have their commits clean (no generated file with megabytes of information committed).#2022-02-0712:52borkdudeyeah, s3 or google cloud#2022-02-0712:52borkdudewhatever, could be configurable as long as you have a URL with a file to download#2022-02-0712:53pfeodrippeYes!#2022-02-0714:41ikitomminice! Malli itself can do some basic inferring of schemas based on malli schemas or arglists. Maybe that could be plugged in too?
(defn kikka
  ([a] [a])
  ([a b & cs] [a b cs]))

(md/infer #'kikka)
;[:function
; [:=> [:cat :any] :any] 
; [:=> [:cat :any :any [:* :any]] :any]]
#2022-02-0714:41ikitommi
(mx/defn kukka :- [:vector :int]
  ([a :- :int] [a])
  ([a :- :int, b :- :int, & cs :- [:* :int]] [a b cs]))

(md/infer #'kukka)
;[:function
; [:=> [:cat :int] [:vector :int]] 
; [:=> [:cat :int :int [:* :int]] [:vector :int]]]
#2022-02-0714:47pfeodrippeYes, I'm using the wonderful malli.destructure ns in the extension, it works pretty well :)#2022-02-0715:07ikitommioh, didn’t notice, cool 😎#2022-02-0806:16robert-stuttafordliving in the future!#2022-02-0718:18mauricio.szaboHi folks! One day I found out a tool that converts JS to ClojureScript, but unfortunately it didn't support most of JS features. I decided to hack on it, found out that it was written in JS, could not find my way around the code, so I decided to do a rewrite: https://gitlab.com/mauricioszabo/js2cljs This is the live version: https://mauricioszabo.gitlab.io/js2cljs/#2022-02-0718:18mauricio.szaboBTW, I accept help from people that know more about UI design to make it better :rolling_on_the_floor_laughing:#2022-02-0718:21kipzCool! Why do you need this out of interest? To be nice to your eyes when reading JS?#2022-02-0719:04Aleedi was looking for something like this when reading js documentation that I wanted to copy to cljs. so good to know it exists the specific case was copying jsx logic to cljs, which may be more difficult to support given various ways it could be written 😅#2022-02-0719:13borkdudeImpressive!#2022-02-0719:14borkdude@U3Y18N0UC I tried what it would make for class Foo {}
(modern/defclass Foo (constructor [this]))
#2022-02-0719:15mauricio.szaboYeah, that's the [shadow.cljs.modern :as modern] require that I'm not importing yet 😅#2022-02-0719:16mauricio.szabo@UPH6EL9DH the problem with JSX is that it's not really Javascript, so... you need to Babel first 😞#2022-02-0719:24borkdudeyou can find online JSX translators as well, but I would find that a nice bonus for the online version#2022-02-0719:25borkdudeJSX -> Reagent#2022-02-0719:34mauricio.szaboYeah, I intend to add some configs in the future, like, "convert all objects to CLJS" (right now it tries to keep JS structures intact for example)#2022-02-0719:34mauricio.szaboThat's why JS destructuring becomes so weird 😄#2022-02-0719:35borkdudeI've actually pondered if I should support some kind of JS like language for babashka for people who want to use the libraries/Java classes, but can't write Clojure. So far the answer has been no every time, but with this as front-end, it could be fun ;)#2022-02-0719:37borkdudeBut I guess you would soon run into issues like Thread.sleep(1000) -> (Thread/sleep 1000) vs (.sleep Thread 1000)#2022-02-0720:31Aleedwhat’s a use case for people who know only JS wanting to use Java classes?#2022-02-0720:35borkdudeJS/Java-ish syntax may be more familiar to them#2022-02-0723:57mauricio.szaboBTW, thanks for multiple comments, I found and fixed some bugs :D#2022-02-0809:35slipsetIt would be really handy for me if we could make it work both ways, as a Clojurist dabbling in JS from time to time 🙂#2022-02-0810:00borkdude@U04V5VAUN CLJS already translates clojure into JS ;)#2022-02-0819:34eccentric JThis is awesome!#2022-02-1009:11Chris McCormick@U04V5VAUN you might be interested in https://github.com/wisp-lang/wisp which outputs JS from clojure-like lisp.#2022-02-1017:44AkizCool! This is probably outside of the scope but this
String(count) + " times"
is formated as
(+ (String count) " times")
It would be nice to get
(str count " times") 
#2022-02-0811:01oliyHi all, I'm pleased to announce the 0.1.17 release of re-graph re-graph is a GraphQL client for Clojure and ClojureScript with bindings for re-frame applications. https://github.com/oliyh/re-graph This release improves: • updated all dependencies, should now work with clj-http 3.10+ • updated logging to remove js compiler warnings #2022-02-0811:06wotbrewhttps://github.com/wotbrew/relic 0.1.5 has been just been cut • joins can now use more kinds of index. • changed :agg behaviour over all rows in empty collections to enable more kinds of constraint. There has also been bug fixes and other minor improvements since the initial release a few weeks ago, see https://github.com/wotbrew/relic/blob/master/CHANGELOG.md. Oh and if you didn't see there is also https://github.com/wotbrew/relic/tree/master/dev/examples/cljidle made with relic as dog-food that demonstrates a basic reagent integration. Chat in #relic.#2022-02-0811:11wotbrewWas going to post in #releases as 'quite boring', but I realised cljidle might ruin productivity for a few folks.#2022-02-0811:38mynomotoMine is ruined 👏#2022-02-0813:05robert-stuttafordit's still a regular topic in our slack haha#2022-02-0813:11mynomotoThis shoud be posted on #clojure-gamedev, I can spend the whole day clicking as it is now but imagine adding keyboard clicking sounds and adding extra monitors on the workstation 😂#2022-02-0813:21wotbrewI mean its just a joke and took like 2 hours, but I think I should make a version 2. All good idle games need a transcendence mechanic...#2022-02-0813:03IvoDhttps://flexiana.com/2022/02/investigating-clojures-transducer-composition#2022-02-0813:05otfromIs this more of a #news-and-articles thing?#2022-02-0813:06flowthingIt is, and it was already posted there earlier.#2022-02-0814:17martinklepsch@U02A1N29GSH Please don’t post blog posts like this one in #announcements. I’ll leave it here for now but consider this a warning. Announcements is for announcements only, as per channel description.#2022-02-0814:24IvoDSure, apologies.#2022-02-0815:56seancorfieldIn going to delete it from here now that @U02A1N29GSH has responded because I don't want the presence of this to encourage others to post blog posts etc.#2022-02-0816:33IvoDFair enough.#2022-02-0909:22borkdudeSCI v0.2.9: Clojure/Script interpreter used in #babashka, #nbb, #obb, scittle, #clj-kondo, #jet and various other projects. https://github.com/babashka/sci/blob/master/CHANGELOG.md#v029#2022-02-0920:46borkdudeclj-kondo, a linter for clojure (code) that sparks joy, v2022.02.09 clj-kondo 2022.02.09. • Feature https://github.com/clj-kondo/clj-kondo/issues/1549: detect and warn on cyclic task dependencies in bb.edn (https://github.com/mknoszlig) • Feature https://github.com/clj-kondo/clj-kondo/issues/1547: catch tasks undefined tasks present in `:depends`. (https://github.com/mknoszlig) • Feature https://github.com/clj-kondo/clj-kondo/issues/783: `:keys` can be used in `:ret` position, also fixes types return map call as input for another typed map function. (https://github.com/pfeodrippe) • Feature https://github.com/clj-kondo/clj-kondo/issues/1526: detect redundant fn wrappers, like `#(inc %)`. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#redundant-fn-wrapper. This linter is :off by default, but may be enabled by default in future versions after more testing. • Feature https://github.com/clj-kondo/clj-kondo/issues/1560: lint task definition keys in bb.edn (https://github.com/mknoszlig) • Feature https://github.com/clj-kondo/clj-kondo/issues/1484: Add analysis information about protocol implementations. (https://github.com/ericdallo) • Fix https://github.com/clj-kondo/clj-kondo/issues/1563: vector inside list should not be linted as function call when inside tagged literal. • Fix https://github.com/clj-kondo/clj-kondo/issues/1540: imported class flagged as unused when it only appears in annotation metadata. • Fix https://github.com/clj-kondo/clj-kondo/issues/1571: ignore spliced reader conditionals wrt. namespace sorting. • Fix https://github.com/clj-kondo/clj-kondo/issues/1574: def usage context contains reference of the re-frame reg-sub it is used in. (https://github.com/benedekfazekas) Join #clj-kondo for more info.#2022-02-0922:27borkdudeSee the new :redundant-fn-wrapper linter in action: https://github.com/clj-commons/rewrite-clj/commit/d9eda955f09d09fd1246244ce9d8a4ec5b247ea8#2022-02-1002:00Matheus Bernardeshttps://github.com/clj-holmes/clj-watson clj-watson v1 It's a software composition analysis (SCA) tool that focus in finding and remediate vulnerable direct and transitive dependencies.#2022-02-1014:10Alex Miller (Clojure team)After reading the readme, I still have no idea what this actually does#2022-02-1014:11Alex Miller (Clojure team)vulnerable ... to what? remediate .... how?#2022-02-1015:17Matheus Bernardeshttps://github.com/clj-holmes/clj-watson/pull/2 reviewplease#2022-02-1015:20Alex Miller (Clojure team)thanks!#2022-02-1021:21uochanJust released antq ver 1.5.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Added a option to ignore versions installed to the local Maven repository.#2022-02-1215:36niwinzJust released funcool/promesa v6.1.434 that comes with -> , ->> and as-> threading macros, variants of the same macros from clojure.core that works with promises. https://github.com/funcool/promesa#2022-02-1218:57borkdude@U06B73YQJ Thanks for promesa, it's probably the most important built-in library in #nbb for dealing with JS promises#2022-02-1219:13niwinzglad to hear it, and glad it is useful 😄#2022-02-1421:30eccentric Jhttps://github.com/athos/kitchen-async that's been my goto promise library for a few years. Any thoughts on key differences?#2022-02-1421:37borkdudeWhat I like about promesa is that it is very light weight, no external dependencies, just makes it more convenient to work with JS native promises and that's it. No extra baggage and results in small bundle size.#2022-02-1506:26eccentric JThat's fair but unless I'm mistaken, kitchen async also has no external deps#2022-02-1507:02borkdudeI saw it has a dep on core async but I don't know if it's really used #2022-02-1518:27eccentric JAh you're right. Looks like it has a specific from channel to promise API https://github.com/athos/kitchen-async/blob/master/src/kitchen_async/promise/from_channel.cljs which satisfies my question 😛#2022-02-1218:34phronmophobicSnowball: Tool for inspecting the sizes of your dependencies https://github.com/phronmophobic/snowball Supports 3 views: interactive treemap, static image treemap, terminal table#2022-02-1218:39Alex Miller (Clojure team)nice!#2022-02-1218:55Ben SlessYou could easily make a treemap du out of it, too#2022-02-1218:58phronmophobic@UK0810AQ2, I thought that's what I was doing.#2022-02-1219:07phronmophobicOh, I think I misunderstood your suggestion. You mean make a version that is given a local directory and spits out a tree map? #2022-02-1219:20Ben SlessExactly! You could probably add it with a tiny change#2022-02-1219:21Ben SlessMaybe even extract the treemap to its own library for visualization components :thinking_face:#2022-02-1219:23phronmophobichttps://github.com/phronmophobic/treemap-clj 😄#2022-02-1219:25Ben SlessOh, carry on, then 😄#2022-02-1301:41Lukas Domagala@U7RJTCH6J I really like your treemap https://blog.phronemophobic.com/treemap/treemaps-are-awesome.html!#2022-02-1320:04jumarIs there a way to run this on a lein project? I guess no?#2022-02-1320:24phronmophobic@U06BE1L6T, not directly, but it will work with mvn deps. So the workaround is something like:
$ lein install
Created /Users/adrian/workspace/membrane-re-frame-example/target/membrane-re-frame-example-0.1.0-SNAPSHOT.jar
Wrote /Users/adrian/workspace/membrane-re-frame-example/pom.xml
Installed jar and pom into local repo.
$ clojure -X:snowball :lib membrane-re-frame-example :mvn/version '"0.1.0-SNAPSHOT"'
#2022-02-1320:31jumarAh, I see. I in fact tried it on one of our private repos/libs but got an error due to, I suppose, snowball not able to resolve dependencies stored in a private maven repo.#2022-02-1320:35phronmophobicIt requires knowing how the clojure deps.edn works, but you could make a small deps.edn file like:
{:deps
 {my/library {:mvn/version "0.1.2"}}
 :mvn/repos
 {"my-private-repo" {:url ""}}}
and then run
clojure -X:snowball :deps deps.edn
or pass it all on the command line:
clojure -Sdeps '{:mvn/repos {"central" {:url ""}}}' -X:snowball :lib membrane-re-frame-example :mvn/version '"0.1.0-SNAPSHOT"'
#2022-02-1405:45robert-stuttafordthis is very cool thank you!#2022-02-1406:56jumarThanks @U7RJTCH6J I also found this: https://github.com/hagmonk/depify It can be helpful to convert project.clj to deps.edn.#2022-02-1407:24jumarA really useful tool - I already found one big dependency (almost 40M) which hasn't been needed in our app for years.#2022-02-1407:28phronmophobicNice! Let me know if you have any suggestions or find any bugs.#2022-02-1407:32jumarA way to produce machine-readable output if there's not one already. E.g. CSV. Right now I'm doing naively something like this:
cat deps-size.txt | sed -E 's/( |,)+//g' | tr '|' ',' > deps-size.csv
Then I can explore it with https://www.visidata.org/, Excel, etc.
#2022-02-1407:36phronmophobicGreat idea! Just created an issue https://github.com/phronmophobic/snowball/issues/1#2022-02-1407:41jumarAlso I'm not sure I understand the treemap visualization (it's quite messy for a larger project or I just didn't know how to read it well) Does it try to visualize the dependency chain? (that is if box B is inside A it means that dependency A brings dependency B?) Either way, it could be useful to have a plaintext version of such treemap.#2022-02-1407:51phronmophobic> Also I'm not sure I understand the treemap visualization (it's quite messy for a larger project or I just didn't know how to read it well) I agree that the treemap is a little messy. If the project is open source, I would be interested to see what the output looks like so I can think about how to improve it. > Does it try to visualize the dependency chain? (that is if box B is inside A it means that dependency A brings dependency B?) Yes, that's how it currently works. Every box is a dependency. The dependency box will have sub-boxes for each of its dependencies and a "self" box for its own code (you may seems some labels such as "self:<projectname>". > Either way, it could be useful to have a plaintext version of such treemap. I'm not sure what that means. Do you have an example?#2022-02-1409:15henryw374cool! I noticed a lot of people citing build size as a cljs issue in the last clojure survey, but not much discussion about that generally that I'm aware of. Larger build size doesn't necessarily mean significantly slower page load or more data transfer over multiple visits - see https://widdindustries.com/clojurescript-datetime-lib-comparison/ for example. but if you do decide reducing build size is necessary then this tool looks handy#2022-02-1411:13jumar@U7RJTCH6J My project is closed-source but I don't think there's anything sensitive - I can share it via DM. About this: > Either way, it could be useful to have a plaintext version of such treemap. I meant that instead of just a picture I'd like to get the actual structure that's used to generate the picture - perhaps as EDN or whatever. So I can navigate it in a terminal and even build an alternative representation if needed.#2022-02-1309:36pezCalva, a Clojure IDE extension for VS Code, v2.0.243 is out. Thanks to all contributors! These are the changes since last announcement: • https://github.com/BetterThanTomorrow/calva/pull/1179 • Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1529 • Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1524 • Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1520 • Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1520 (Change was not actually included in this release. See next release.) • Fix: https://github.com/BetterThanTomorrow/calva/issues/1594 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1516 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1594 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1495https://github.com/BetterThanTomorrow/calva/issues/1465https://github.com/BetterThanTomorrow/calva/issues/1474https://github.com/BetterThanTomorrow/calva/pull/1442https://github.com/BetterThanTomorrow/calva/issues/1299 • Workaround: https://github.com/BetterThanTomorrow/calva/pull/1475https://github.com/BetterThanTomorrow/calva/issues/1250 • Fix: [Snippet in custom command doesn't work with function metadata] (https://github.com/BetterThanTomorrow/calva/issues/1463) • https://github.com/BetterThanTomorrow/calva/pull/1454https://github.com/BetterThanTomorrow/calva/issues/1456.#2022-02-1310:03pezThe latest change is extra important, because it fixes problems with Calva formatting that has stopped it from working in some files with idiomatic Clojure code. (Due to a dependency on legacy rewrite-cljs). #2022-02-1310:04pezI specifically remember this hitting @U21QNFC5C. Maybe it's time to try out Calva again? 😀#2022-02-1407:45ingesol@U0ETXRFEW Haha, Calva was great, but unfortunately I was too fond of intellij text editing and multiple cursors.#2022-02-1320:51magnarshttps://github.com/magnars/optimus, a ring middleware for frontend performance optimisation, is out of its 0.x infancy after 9 years. It will concatenate, minify, cache-bust and otherwise optimise your frontend assets. The newest release [optimus "2022-02-13"] has: • Pluggable JS engine via JSR223. Execute JS optimisations w/ GraalJS, Nashorn or Rhino. • This means that the dependency on clj-v8 and its V8 binaries are gone. This allows us to: • Add support for Windows and M1 macs.#2022-02-1321:46quollDespite Rich publicly castigating semantic versioning, I still like it and have continued to use it. The primary alternative that I’m aware of has been github hashcodes, which I don’t like due to their opacity. But using the release date? I love it! ❤️#2022-02-1323:07borkdudeI'm doing the same for clj-kondo :) @U07FCNURX I remember having used your ring middleware in one of my first Clojure projects almost a decade or so ago and remember that a colleague who was using Windows could not run this. Nice to see it finally got addressed :).#2022-02-1407:46magnarsWindows support was a long time coming, since Nashorn was roughly 10x slower than V8, which reduced the utility of Optimus too much. Thankfully JSR223 with GraalJS works great on all sorts of machines. 🙂#2022-02-1415:45Alex Miller (Clojure team)a significant downside of using dashed date versions is that Maven doesn't understand that. clj-kondo's dotted dates are much better for that.#2022-02-1420:07magnarsThanks for the heads up, I'll keep that in mind going forward! 👍#2022-02-1420:08borkdudeOne thing I will maybe change about clj-kondo's format is strip the leading zeroes, e.g. 2022.02.08 will become 2022.2.8#2022-02-1420:39Alex Miller (Clojure team)that might break sorting in some scenarios#2022-02-1420:39Alex Miller (Clojure team)certainly breaks lexicographic sorting. Maven version comparators convert those to numbers so that should be ok, but tooling around maven things is not always so good#2022-02-1420:45borkdudeWell maybe for the next project that will adopt that kind of versioning. I already had to do this processing for clj-kondo's LSP package (which uses the same version as clj-kondo) on npm since they don't even accept these leading zeroes.#2022-02-1420:49borkdudehttps://marketplace.visualstudio.com/items?itemName=borkdude.clj-kondo -> 2022.2.9#2022-02-1321:15cheelJust started a text-formatting library https://github.com/rorokimdim/pp-grid Designed for the repl. Please see some of the examples in README to learn more. Initial alpha version 0.0.1 just uploaded to clojars. I'm a hobby clojurist. Still learning clojure. So will appreciate help in improving the code, fixing bugs or adding features. Thank you!#2022-02-1517:54Santanu ChakrabartiI checked your library. Very impressive.#2022-02-1518:26cheelthanks for checking it out!#2022-02-1408:21sachin gurjarHi, I am sachin gurjar who is passionate about coding. looking for internship or full time junior role in frontend or full stack. I highly recommend you to see my portfolio/website at https://sachingurjar.com/#2022-02-1416:35seancorfieldDeleted as spam and deactivated.#2022-02-1411:13borkdudeJust released a new version of #nbb (0.1.6). It is a scripting tool for Node.js akin to #babashka. This release has a massive performance improvement (4-6x) for loops. Also the bundled promesa library by @niwinz was updated which has -> and ->> macros for promises. And now nbb is compatible with Graal.js too. Last announcement here was with version 0.1.0. Check out all changes since then: https://github.com/babashka/nbb/blob/main/CHANGELOG.md#016 Try it out locally using npx nbb#2022-02-1411:16Lukas DomagalaNice! Is there a link to the performance speed-up change? I’m interested to see how you got so much more out of it.#2022-02-1411:16borkdudeCheck the latest commit in SCI which is the interpreter backing this.#2022-02-1411:17borkdudeThe gist is: now it's using mutable arrays instead of an immutable map for local bindings.#2022-02-1411:20Lukas DomagalaThanks. I was checking SCI’s changelog but that commit isn’t in the changelog yet 😅#2022-02-1411:21borkdudecorrect and it won't cover any details#2022-02-1411:22borkdudeThe gist is just what I said, details are in the commit :)#2022-02-1411:23Lukas DomagalaYeah, I’m looking at the commit right now. My comment was just an explanation for why I didn’t find the change myself. Thanks for pointing me to the right place clojure-spin#2022-02-1422:01Mark WardleNew release of hermes - v0.8.353 - SNOMED CT terminology library and HTTP service, with optional FHIR terminology server if required. https://github.com/wardle/hermes/releases/tag/v0.8.353 It is one component of a suite of composable data services for health and care, that I join together in real-life clinical applications using a graph API via @wilkerlucio’s excellent pathom library. Deployed and running within the NHS here in the UK, as well as other deployments supporting academic research.#2022-02-1516:58wilkerlucioHello everyone! Today Pathom Viz 2022.2.15 is out! This release includes: • Resize panels now uses % instead of absolute sizes for a better app resize flow • Render entity data in request history when available ◦ Note for that you need to bump Pathom Viz Connector to version 2022.02.14 • Fix situation where Pathom 3 renders a Trace view with blank data • Save entity data in query history • Support lenient mode setting in query editor • Support include stats setting in query editor • Support report from strict errors in Pathom 3 ◦ Note that the latest Pathom 3 doesn't have the changes yet to work with this, but you can try using the latest SNAPSHOT release of Pathom 3, which is 2022.02.14-alpha-SNAPSHOT. For more info on this check https://github.com/wilkerlucio/pathom3/pull/129 For current users, just relaunch the app to get it automatically updated. Or download it from https://github.com/wilkerlucio/pathom-viz/releases/tag/v2022.2.15#2022-02-1518:21KelvinIntroducing v0.1.0 of Flint, a Clojure(Script) DSL for creating SPARQL query and update strings. https://github.com/yetanalytics/flint Example:
(require '[com.yetanalytics.flint :as flint])

(flint/format-query '{:select [?x] :where [[?x "<>" 100]]})

;; => SELECT ?x WHERE { ?x <> 100 . }
#2022-02-1609:30rickmoynihanWow this looks great! It’s something I’ve been meaning to write for a long time; bravo!!! I’ve only looked at this for two minutes, and it looks like it works almost exactly how I’d imagine but a few questions: 1. Have you thought about adding a protocol for representing URI literals, and extending it to java.net.URI and perhaps letting users extend it to jena/rdf4j’s URI classes? Having to encode a string as "<>" feels wrong. What if you had an xsd string which was of the form "<[stuff]>" how would that be interpreted? 2. Similarly providing protocols for coercing other literals, e.g. xsd:date vs xsd:dateTime etc. (These protocols would presumably want to also define datatype-uri accessor.) Like 1 this would allow passing datatypes easily between this and an arbitrary RDF backend e.g. jena/rdf4j. 3. In the map bgp/triple syntax can you also write {:dc/publisher ?publisher} or do you always need to wrap a set over it? 4. Have you considered adding a parser that targets SPARQL 1.1. query strings and converts them into this edn query data structure?#2022-02-1609:40simongrayThis looks very useful. Thanks a lot!#2022-02-1614:40Kelvin@U06HHF230 1. I actually have not thought about using protocols to represent literals. Extending any such protocol to a particular Java library could be tricky, however, since Flint supports cljs (and doubly so for a particular Jena class, since I want it to remain implementation-agnostic). As of right now, angle brackets = IRIs, so any string surrounded by them is an IRI, and any IRI will have to be surrounded by them. 2. For the above reason (i.e. I haven't thought about using protocols), there isn't support for literals beyond strings, numerics, booleans, and dateTimes. I wasn't sure how I'd actually implement literals beyond that so thanks for the protocols suggestion; I figure that the already-supported literals will cover most peoples' cases, though, so this would not be a huge priority. 3. You always need to wrap an object in a set, as that is how they're written in https://github.com/ont-app/igraph#the-igraph-protocol. I understand that this can get annoying, though, so maybe in the future Flint can have syntactic sugar where ?obj becomes #{?obj}. 4. I actually did, but I abandoned that idea early on due to its complexity. A big problem is that there are certain valid SPARQL strings that Flint does not support, e.g. https://www.w3.org/TR/sparql11-query/#collections, as well as subtle syntax variations.#2022-02-1615:04rickmoynihan@U02FU7RMG8M: Thanks for the reply… perhaps we can take this discussion to #rdf?#2022-02-1615:06KelvinI was not aware that there was an RDF channel, but sure we can talk more there.#2022-02-1615:07rickmoynihan:thumbsup: cool#2022-02-1610:47Carsten BehringA new release 0.3.1. of opencpu-clj, a Clojure client to https://www.opencpu.org/ , is available. It was updated to match with small changes in the public opencpu cloud server at https://cloud.opencpu.org/ocpu/ https://clojars.org/opencpu-clj#2022-02-1611:22Ivar RefsdalI'm pleased to announce https://github.com/ivarref/clj-paginate, a Clojure (JVM) library to paginate vectors and maps according to the GraphQL Cursor Connections Specification. I spent way more time on this than I thought I would, so hopefully it is useful to someone 😅#2022-02-1721:47steveb8nThis is a great idea. Do you plan to support cljs eventually? Also, adding an adapter for the new Clojure Iterator on top of this will make it even more appealing imho#2022-02-1812:34Ivar RefsdalThanks! Not any plans for cljs per se, but I don't think it should be hard to port. The java/JVM specific things is just type hints and an improvement to pr-str usage. Note that this library is for the data serving side, not sure how common cljs servers/backends are? The new Clojure iterator is neat. I am not quite sure what you mean here though. Are you suggesting that 1. clj-paginate should support Clojure Iterator as input in addition to vectors and maps, or are you suggesting that a 2. client side consumer could consume a graphql cursor pagination using the new clojure iterator? For 1. I don't think it's a very good match. Clj-paginate needs a sorted and indexed collection of some sort, at least that is how it resumes giving out data. I think 2. is fine, but I'm not sure how it would support what I've termed "long polling", that is: sleeping for a while and then checking if there is more data. But if long polling is not needed, it's absolutely a good match I think. I wrote a simple gist for this some time back: https://gist.github.com/ivarref/41d4914b1ec3936ad83e0ed9a9c8517d#2022-02-2023:09steveb8nI’m primarily thinking about #2 in re-frame apps#2022-02-1614:21Sam RitchieAnnouncing v0.21.1 of the #sicmutils computer algebra system! The big feature of this release is an exported #clj-kondo config that can lint all #sicmutils macros. • Clojars: https://clojars.org/sicmutils/sicmutils • detailed release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.21.1 • Linter docs and installation instructions on cljdoc: https://cljdoc.org/d/sicmutils/sicmutils/0.21.1/doc/misc/clj-kondo-linters I went overboard thanks to the wonderful hooks API, so the linter now provides surgical advice to pattern-matching authors and users of other binding macros. #clj-kondo is some amazing Lispy sorcery. Thank you @borkdude for your help! Cheers!#2022-02-1617:16Alex Miller (Clojure team)Clojure https://clojure.org/releases/devchangelog#v1.11.0-rc1 is now available, functionally same as beta1 • https://clojure.atlassian.net/browse/CLJ-2697 Add 1.11 changelog • https://clojure.atlassian.net/browse/CLJ-2695 Add more tests for parse-double If you haven't tried 1.11 with your project yet, now is the time! We would love to know there's an issue before we release rather than after. You can review the https://github.com/clojure/clojure/blob/master/changes.md#changes-to-clojure-in-version-1110.#2022-02-1618:08seancorfieldThe change log says "CLJ-2664 Add clojure.java.math namespace, wrappers for java.lang.Math" which might be confusing for folks, given that it ended up being called clojure.math -- is it worth rewording that to clarify the end result in 1.11?#2022-02-1704:21eccentric JWhoa that keyword argument feature is awesome! Thank you!!#2022-02-1704:59seancorfield@U8WFYMFRU You mean the Alpha 1 change? https://clojure.org/releases/devchangelog#v1.11.0-alpha1 (March last year)#2022-02-1705:10eccentric J😅 Hah yeah missed that but Alex's link covers the full changelog#2022-02-1705:14seancorfieldWe had Alpha 1 in production pretty quickly so that we could take advantage of that -- it's great!#2022-02-1710:32rickmoynihanJust tried 1.11-rc1 on an application codebase with 500+ integration tests and maybe 5/6000 assertions - all green no errors discovered here!#2022-02-1712:36Alex Miller (Clojure team)Thanks, appreciate the report!#2022-02-1712:54rickmoynihanYou’re welcome, we appreciate the clojure development 🙇#2022-02-1807:35Eric@U04V70XH6 "... it ended up being called `clojure.math` -- is it worth rewording that to clarify the end result in 1.11?" I'm a beginner and was looking for a clojure math library. I kept trying to (require [clojure.math :as math]) because I saw it in the repo. After I searched Slack and found this message, I tried changing my clojure version in lein to 1.11.0-rc1 and it fixed my compilation error. 😆 This was just an anecdote from a lost n00b, but I had no problem finding clojure.math.#2022-02-1808:18seancorfieldWe have RC 1 on our QA/staging systems now and it should be on our production systems by the middle of next week.#2022-02-1808:18seancorfield(we have a mix of Alpha 4 and Beta 1 in production right now)#2022-02-2109:04rickmoynihanJust tried 1.11.0-rc1 on another project 346 tests, 1393 assertions all green #2022-02-2222:56seancorfieldJust FYI: we have RC 1 in production for all processes now.#2022-02-2321:13Alex Miller (Clojure team)Anyone else out there testing 1.11.0-rc1? If you have feedback (good or bad) please let us know!#2022-02-2321:18lukaszI tried RC1 with a couple of our biggest test suites and no issues so far#2022-02-2321:18borkdudeEveryone running the latest babashka has been trying out beta1 :-) - So far I haven't heard any issues related to that.#2022-02-2321:32Daniel JompheRan our test suite with RC 1 locally over Datomic Cloud's dev-local tooling. All fine. This is a Datomic Cloud Ion product, so a real migration depends on you. 🙂 Bumping it back down until then...#2022-02-2321:59imreWe used alpha3 then beta1 and are slowly rolling out rc1 as services receive updates, no problems exerienced so far. Math additions are great!#2022-02-2323:15dorabrc1 works fine. Smallish code base, but reasonably good tests.#2022-02-2323:35jacob.maineThe latest clojure-lsp (released today) is built with rc1. lsp 2022.02.23-12.12.12. No issues reported so far, or at least none that I’ve heard about.#2022-02-2406:42henryw374no issues so far :thumbsup:#2022-02-2407:56flowthingRan the test suites with 1.11.0-rc1 for five Clojure projects I work on (~100,000 lines of Clojure). All green. :thumbsup:#2022-02-2408:18msolliWe have rc1 in production. No issues. (~50 kloc of Clojure).#2022-03-0214:08Sam Ritchie@U064X3EF3 all tests pass with no changes on https://github.com/sicmutils/sicmutils, 27k loc and 7k tests. (just a batch of warnings from abs, update-keys and update-vals in various dependencies: https://gist.github.com/sritchie/f504e37fa73305c045de82502b6f7e1f)#2022-02-1621:17uochanJust released vim-iced ver 3.8.0, Clojure Interactive Development Environment for Vim8/Neovim. https://github.com/liquidz/vim-iced Added support for jumping to protocol implementations(requires clj-kondo v2022.02.09 or later) and storing evaluated results to numbered registers.#2022-02-1621:32borkdude@UKFSJSM38 ^ :)#2022-02-2321:13Alex Miller (Clojure team)Anyone else out there testing 1.11.0-rc1? If you have feedback (good or bad) please let us know!#2022-02-1703:40danielcomptonClojurists Together is funding work to bring custom formatters (needed for cljs-devtools) to Firefox: https://www.clojuriststogether.org/news/funding-development-on-custom-formatters-for-firefox/#2022-02-2107:01plexusOMG after all these years 🙀 bmo#2022-03-0106:00kingmobSuch good news. I took a stab a few years ago, but getting into the FF code base was more than I bargained on#2022-02-1810:33borkdudepod-babashka-go-sqlite3 0.1.0 is out: https://github.com/babashka/pod-babashka-go-sqlite3 it's been a year since the previous release. use sqlite3 directly from babashka without installing sqlite, the pod is self-contained and written in ... golang! discuss in #babashka#2022-02-1821:14Jakub Holý (HolyJak)Hm, I have been looking for a Rust project to write. Making sqlite / something pod for bb sounds as just the right thing 🙂#2022-02-1821:17borkdudeYeap :) There's a Rust filewatcher pod for bb too#2022-02-1821:21borkdudeYou can check here for all "registered" pods: https://github.com/babashka/pod-registry#2022-02-1822:01Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.7.7 is now available • compile-clj - TBUILD-27 - Use basis as default src dirs • Update to tools.deps.alpha 0.12.1148#2022-02-1900:11practicalli-johnhttps://github.com/practicalli/clojure-deps-edn/ provides a wide range of community tools via aliases that can be used across all projects. The latest updates include: • migrating aliases to clojure.exec -X option for supported projects, using -T execution option where the alias should run outside a project classpath • :src/clojure to add local clone of Clojure core sources (Java & Clojure), supporting Jump to definition of Clojure core, particularly the Java sources • src/java17 to add manually downloaded Java JDK sources to the classpath, supporting editor jump to definition for Java interop • :lib/kaocha includes kaocha as a library, enabling scripts such as kaocha-runner.el to run Kaocha test runner from Emacs Cider • update Lambda Island Kaocha with :exec-args to fail-fast by default for :test/run and :test/watch - speeding up test run workflow when there are failing tests • re-organise :inspect/reveal and :repl/rebel-reveal aliases ◦ renamed :inspect/reveal-nrepl-cider to :inspect/reveal-cider simplifying the alias name • add :repl/interactive and :repl/headless to run a simple terminal UI REPL with nREPL server in interactive (with a client) or headless (without client). Or use :repl/nrepl with our without the -i flag for the same results. • Simplified project introduction and https://github.com/practicalli/clojure-deps-edn#common-development-tasks • Updated library versions for all aliases (see https://github.com/practicalli/clojure-deps-edn/blob/live/CHANGELOG.org#2021-02-18 for more details The next release of this project will start supporting the tools.build approach and deprecate aliases such as depstar (which itself is deprecated). Thanks to Nubank/Cognitect and other community members for supporting this and other Practicalli projects.#2022-02-2023:12mike_ananevNew release of Bouncycastle wrapper for Clojure to work with GOST.
The library provides:

- encryption, mac using GOST 28147-89, GOST 3412-2015;
- digest, hmac using GOST3411-94/2012 256 and 512 bits;
- signature using GOST3410-2012 256 and 512 bit key length;
- key generation: secret keys, public/private keys, password based keys;
- compression + encryption + mac / decryption + check mac + decompression
- save/load keys (secret, private, public) to PEM format.
https://github.com/redstarssystems/gost
#2022-02-2109:16slipsetA new version of https://github.com/clj-commons/clj-yaml is out. Thanks to @odd.andreas for contributing! [Fix https://github.com/clj-commons/clj-yaml/issues/27] Add support for indent and indicator-indent (https://github.com/clj-commons/clj-yaml/pull/28)
This change makes it possible to specify the desired
indentation both for the sequence-indicator and for
nested keys.
#2022-02-2110:07borkdudeThanks! Bumped in #babashka!#2022-02-2512:32oddsorThanks @U04V5VAUN and @U04V15CAJ! I was using Babashka to make a script that updates yaml and ended up needing this 🙏#2022-02-2123:42wilkerlucioRelease com.wsscode/pathom3-graphql {:mvn/version "2022.02.21-2-alpha"}, this is first jar release of the library, no changes from the previous dev versions, just making it easy to add via MVN. More details at https://github.com/wilkerlucio/pathom3-graphql#2022-02-2200:58wilkerlucioPathom 3 2022.02.21-alpha is out! This release includes: • INTERNAL BREAK: the internal plan-and-run! from all runners now return env instead of the graph plan • Runner exceptions now return a wrapped error that includes environment data • Boundary interface errors are always data • Boundary interface omit stats by default, open with the :pathom/include-stats? flag on the request • Add pbip/env-wrap-plugin https://clojars.org/com.wsscode/pathom3 Also new doc pages for some of the new features: https://pathom3.wsscode.com/docs/eql/#strict-errors-as-data https://pathom3.wsscode.com/docs/built-in-plugins#extend-environment#2022-02-2202:03jacob.mainehttps://github.com/mainej/headlessui-reagent 1.5.0.47 is out. This release adds the Combobox (a.k.a. Autocomplete) component introduced in @headlessui/react 1.5.0. The repo also includes a new https://github.com/mainej/headlessui-reagent/tree/main/example project showing all the components in action. headlessui-reagent brings accessible, keyboard-friendly, style-agnostic UI components from https://headlessui.dev/ to Reagent and re-frame projects.#2022-02-2204:01olafJust published https://tryclojure.org/ a simple tutorial with the REPL for the Clojure syntax. I got inspired by https://tryhaskell.org and I’ve used #sci to create the command line interface. Source: https://github.com/elias94/tryclojure My girlfriend completed it so I hope is simple enough for totally beginners. Contributions and ideas are welcome!#2022-02-2205:07jeroenvandijkBeautiful! (3rd question only allows one specific list '( 1 2 3), but that should be any list I think)#2022-02-2205:33olafYes, fixed thanks :thumbsup:#2022-02-2206:01robert-stuttafordFYI @U01UYD2CL10 i get a certificate not valid SSL error when I visit, likely because i have https-everywhere enabled :)#2022-02-2206:21olaf@U0509NKGK thanks. I’m waiting for netlify for it, maybe retry later#2022-02-2206:26olafhttps://tryclojure.org/#2022-02-2206:28pezAwesome stuff! Minor things I noted: On the phone it still said that the repl is on the right, and the content spans past the screen width, making the whole page scroll sideways. #2022-02-2207:07olafThanks @U0ETXRFEW, fixed! Btw, it’s all done with #calva#2022-02-2209:59borkdude@U01UYD2CL10 Cool! I'll add it to the projects using SCI here: https://github.com/babashka/sci#projects-using-sci#2022-02-2210:01borkdudeDone#2022-02-2210:01olafThanks!!#2022-02-2210:11borkdude@U01UYD2CL10 I like the UI design, awesome work. One possible improvement: when pressing Ctrl-C or so, perhaps abort reading an incompleted form. E.g. when I typed: (first '("foo "bar")) it was difficult for me to see that I still needed to insert another quote and some parens to get back into a functioning REPL. Having a way to start over from scratch, like Ctrl-C or so, could help.#2022-02-2210:24borkdude@U01UYD2CL10 btw, did you know that:
(clojure.repl/doc inc)
also works? :) You might want to evaluate (require '[clojure.repl :refer :all])) in your SCI ctx so doc is available immediately and document this.
#2022-02-2210:37Jakub Holý (HolyJak)Perhaps mention to press Enter to Eval the expression?#2022-02-2210:39borkdudeI think you could even display what closing delimiter is expected still as this is exposed in the ex-data of SCI's parser.#2022-02-2210:40borkdude
user=> (ex-data (try (sci/eval-string "[") (catch Exception e e)))
{:type :sci.error/parse, :line 1, :column 2, :edamame/expected-delimiter "]", :edamame/opened-delimiter "[", :edamame/opened-delimiter-loc {:row 1, :col 1}, :phase "parse", :file nil}
#2022-02-2211:50borkdudescratched my own itch: https://github.com/elias94/tryclojure/pull/3#2022-02-2211:52plexusGreat stuff! Thanks for making this! small suggestion, put the current "page" people are on in the URL, so they can bookmark and jump back, etc#2022-02-2211:54olaf@U04V15CAJ sorry for the late reply I was literally doing it 😄 what about a placeholder?#2022-02-2211:55olafP.s. there’s also a dark version depending on your OS#2022-02-2211:57borkdude@U01UYD2CL10 In the PR I showed it in the hint at the top of the REPL#2022-02-2211:57borkdudeFeel free to close the PR and do whatever you want, if you want to do it another way#2022-02-2212:00olafI’m scared the hint at the top is not fixed and disappears if I keep typing commands#2022-02-2212:00olafThanks for the hints, I’ve added all of them#2022-02-2212:00borkdudeok, just use the PR as inspiration and close it :)#2022-02-2212:13mbjarlandperhaps also a link to the clojure exercism track (`https://exercism.org/tracks/clojure`) at the end as that seems to get a lot of traction lately#2022-02-2212:24borkdude@U01UYD2CL10 Awesome, it works :) One very minor thing: there is a typo, demiliter is spelled as delimiter#2022-02-2212:26borkdudeAnother idea: print functions as a special format instead of the JS output. https://news.ycombinator.com/item?id=30426531 E.g. (if (fn? ...) "<function>" ...) There may be a better way for this, e.g. overriding some protocol or multi-method. @U5H74UNSF how does clerk do this?#2022-02-2212:30borkdudeAlso, when pressing ctrl-c, the delimiter hint can go away, now it stays there#2022-02-2212:35olaf@U04V15CAJ thanks, I’ve also added (help) with some functions. Fixed ctrl-c. For the print function makes sense but seems not working as expected. It seems that s is always a string.
(defn set-print-fn
  "Setup a custom `print-fn` for sci."
  [f]
  (sci/alter-var-root sci/print-fn (constantly f)))

(set-print-fn (fn [s]
                    (if (fn? s)
                      "<function>"
                      (write-repl! s))))
#2022-02-2212:38borkdudeThis is probably because you transform the evaluated result in a string first.#2022-02-2212:42borkdudeAh, I think using pr-str is better:
cljs.user=> (pr-str {:a (fn [])})
"{:a #object[Function]}"
#2022-02-2212:43borkdudeInstead of format-out you can probably just use pr-str#2022-02-2212:45olafWhen I transform the output in a string I just check if is fn?. It works!#2022-02-2212:46borkdudeThat won't work for nested things like {:a (fn [])} whereas pr-str will work#2022-02-2212:51olafPushed the patch with pr-str#2022-02-2212:52olaf
=>(map inc)
#object[Function]
#2022-02-2212:55borkdudeawesome!#2022-02-2212:55olafThanks @U04V15CAJ#2022-02-2212:56borkdudeYou too!#2022-02-2213:19borkdude@U01UYD2CL10 I found another interesting edge case: Try typing {:a ;#2022-02-2213:20borkdudethere is no way to finish the input because following inputs are seen without the newline. Perhaps it makes sense to include the newline in the read input.#2022-02-2213:20borkdudeSimilar for how [1\n2\n3] becomes [123] which imo should be [1 2 3]#2022-02-2213:23pezOr eval using a button and let return enter newlines.#2022-02-2213:24borkdudeI like the current behavior better, no mouse usage#2022-02-2213:27pezI was using it from a phone. 😃 On a computer alt+enter could evaluate. But including the newline in the read input might also work.#2022-02-2213:30pez@U01UYD2CL10 perhaps a Where to go next link in the footer could list some resources.#2022-02-2213:51borkdudeMade an issue about it here: https://github.com/elias94/tryclojure/issues/5#2022-02-2214:50borkdudeSome more feedback: https://news.ycombinator.com/item?id=30428311 • can't copy/paste from REPL • description of range unclear. might want to point out that (doc range) is available.#2022-02-2214:55borkdudeI'll make issues#2022-02-2216:33phronmophobicwhen I try to use it on mobile. I get stuck at hello world. I'm pretty sure it's because the quotes on mobile are the wrong kind. “Hello World” shows an errror.#2022-02-2216:38jeroenvandijk@U7RJTCH6J IOS? Worked for me on Android in the Slack webinterface#2022-02-2216:41borkdude@U7RJTCH6J This is Clojure-compatible behavior ;)
user=> "Hello World"
Syntax error compiling at (REPL:0:0).
Unable to resolve symbol: "Hello in this context
#2022-02-2216:42borkdudeI hate those quotes on iOS... everytime I type code this trips me up as well#2022-02-2216:51mbjarlandcan confirm it seems to work on android (galaxy S20 and brave browser, latest version)#2022-02-2216:51phronmophobicI'm on iOS. I know that this is clojure-compatible behavior, but I'm not sure even how to type a normal quote on iOS#2022-02-2216:52phronmophobicIf the repl wants to support iOS, then overriding quote insertion seems like a big improvement#2022-02-2216:54phronmophobicFor example, the same input "just works" at https://clojurescript.io#2022-02-2216:56pezI think there should be some way to inform the browser about this. I used iOS also this morning. As a workaround I long-pressed the quote key and could enter the ones that work.#2022-02-2216:57pezI agree it is better if it just works. Just sharing this info.#2022-02-2216:59borkdudeIt doesn't work for me. Perhaps there is something in that site that checks the user agent or some other setting?#2022-02-2217:00phronmophobicWhen I type “, http://clojurescript.io just inserts " instead#2022-02-2217:08borkdudeCurious which part of their code does that. Nothing special comes up when I grep for the smart quote.#2022-02-2217:12pezDoes it have spellcheck="false" on the input element, maybe?#2022-02-2217:18phronmophobicI think that might be handled by codemirror. Does tryclojure use codemirror?#2022-02-2217:19phronmophobictyping quote from iOS into a normal codemirror editor uses "#2022-02-2217:24borkdudeaaah#2022-02-2217:24borkdudelet's find out what codemirror does then#2022-02-2217:29phronmophobicI think it's as @U0ETXRFEW , suggested. They set spellcheck="false" https://github.com/codemirror/CodeMirror/blob/145c3e23e2bcd1a6643c706c74129b2c3ec5f3fd/src/input/input.js#L119#2022-02-2217:31borkdudeworth a shot then#2022-02-2222:27borkdudehttps://github.com/elias94/tryclojure/issues/4#2022-02-2300:06olafThanks everyone for the help! Fixed all the bugs and merged PRs. spellcheck="false" was the solution#2022-02-2210:45jpeI made a Magit-style interface for creating projects with clj-new and deps-new in Emacs. I included a couple cool templates I've come across but I'm looking for worthy additions if anyone knows any 🙂 https://github.com/jpe90/emacs-clj-deps-new#2022-02-2216:53Ben SlessA. Very cool B. How would you like to turn it into a full-on porcelain for clojure CLI?#2022-02-2218:11jpethat's not a bad idea! I'd finally be forced to actually learn how clojure CLI works instead of copying and pasting random aliases off the internet#2022-02-2218:56Ben Slesssimilar story with learning git 🙂#2022-02-2216:02Alex Miller (Clojure team)https://twitter.com/cognitect/status/1496153239338766337#2022-02-2216:24quollDone! :thumbsup:#2022-02-2216:44wilkerluciodone 👍#2022-02-2217:04p-himikI wonder if you can help me understand some options in question 13. There's Scientific and there's Education. But then there's also Academic - what would be an example here that fits neither Scientific nor Education?#2022-02-2217:09Alex Miller (Clojure team)Just take what you feel is closest, or put it in Other#2022-02-2218:02kinleydDone!#2022-02-2223:42respatializedprobably too late to update after deployment but should we consider babashka its own "dialect" of Clojure for the purposes of this survey?#2022-02-2300:06Alex Miller (Clojure team)was considered, decided we would only include those dialects maintained under the Clojure org#2022-02-2300:07Alex Miller (Clojure team)also consider filling out the Babashka survey! :) https://forms.gle/ko3NjDg2SwXeEoNQ9#2022-02-2223:32Carsten BehringI updated my polyglot docker image and it contains now the Clojure dependencies inside the image for faster startup: The included libraries and their versions are listed here: https://github.com/behrica/clj-py-r-template, v .1.6.0 It is now more usable standalone and you can run it simply by docker run -ti -p 12345:12345 It starts a clojure repl on port 12345 where all Clojure interop libraries (clj-python, clojisr and others) work out of the box. It is full extendable if needed by either: - providing a local deps.edn file - install python , R or other non-clojure packages in a Dockerfile (suing the FROM behrica/clj-py-r:1.6.0 )#2022-02-2313:58ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2022.02.23-12.12.12 with a lot of performance improvements and some new features! Main highlights: The focus of this release was to make clojure-lsp faster on a lot of places, especially on the post-startup time, which stands for the time clojure-lsp analyzed whole project with clj-kondo default linters but is yet linting whole project for unused-public-vars and looking for test trees. 🚀 We did lots of completion and code actions performance improvements thanks to @jacob.maine which did a great help on that! 👏 Following @borkdude suggestion, clojure-lsp by default now check source-paths from the classpath string and not manually checking your project deps file, this should decrease a lot the false-positives of wrong source-paths, especially for lein/deps mono-repo projects! Check https://clojure-lsp.io/settings/#source-paths-discoveryfor more details 🏁 And at least but not last, we now have support for finding implementations of defprotocols following LSP spec and with the help of clj-kondo 🎉 check the gif for a example This release was supported by https://www.clojuriststogether.org/ clojurists-together gratitude Thank you for the new gold sponsor https://github.com/180seg 🧡 For more information check #lsp#2022-02-2316:32erwinrooijakkersMediquest has open sourced its Zorgrank API project at https://github.com/mediquest-nl/zorgrank. It’s a Luminus project that aims to help a general practitioner and patient make joint decisions about the most suitable follow-up care by ranking care providers using a selection model called ZorgRank. Example client of the API can be found here: https://zorgrank-client-demo.mediquest.cloud and the Swagger docs here: https://zorgrank-demo.mediquest.cloud.#2022-02-2411:16borkdudeBabashka fs, a Clojure filesystem library based on java.nio v0.1.3: • Compatibility improvements for `com.google.cloud/google-cloud-nio`: convert `URI` to `Path` directly without going through `URL` • Add `create-temp-file` • Add initial version of `zip` • Add `read-attributes*` without conversion into map • Run `create-dirs` for the `dest` directory in `copy-tree` to ensure it exists (https://github.com/duzunov) • Document `list-dir` `glob-or-accept` argument (https://github.com/holyjak) API docs: https://babashka.org/fs. For questions, visit #babashka. Source code https://github.com/babashka/fs. These and more updates are available in the newly released https://github.com/babashka/babashka/blob/master/CHANGELOG.md#076-2022-02-24. Please leave some feedback about babashka in the https://forms.gle/ko3NjDg2SwXeEoNQ9!#2022-02-2413:21Noah BogartThis is my favorite file system manipulation library. #2022-02-2414:19littleliMichiel! You're a machine! 🙂#2022-02-2417:21lilactownahh I just started using this in a new project and was about to create something akin to create-temp-file 😄 you're a mindreader#2022-02-2421:25Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.8.0 is now available, mostly addressing issues when explicitly binding *project-root* • compile-clj - always create classpath entries relative to *project-root* • java-command - don't resolve classpath entries, leave them relative to *project-root*#2022-02-2509:59borkdudeScittle 0.1.2: use ClojureScript directly in browser script tags via #sci, with built-in support for Reagent and cljs-ajax. Try it immediately on CodePen: https://codepen.io/Prestance/pen/PoOdZQw See here how to use it: https://babashka.org/scittle/ Changes: https://github.com/babashka/scittle/blob/main/CHANGELOG.md Channel: #scittle#2022-02-2518:53wilkerlucioPathom 3 2022.02.25-alpha, this release is packed with nice features and fixes! ◦ ::pcp/expects now can figure implicit attributes on static resolver nested lookup ◦ Planner now removes path options that can't fulfill the sub-query ◦ New priority sort algorithm. Thanks to @mauricio.szabo! ◦ Optimize nested or nodes, pulling nested branches into parent OR node ◦ Add weight sort feature to load balance between OR branches ◦ Fix issue #107 regarding batch + nested optional inputs ◦ Add pf.eql/seq-data->query to find shape of a combined collection ◦ Computation of ::pcp/expects on static resolvers now includes data about nested expectations https://clojars.org/com.wsscode/pathom3#2022-02-2520:11KelvinAnnouncing Pathetic, a utility library for working with JSONPath: https://github.com/yetanalytics/pathetic#2022-02-2520:12KelvinIt was actually open-source for a while, but we recently decided to do some cleanup in v0.4.0 for the wider Clojure community.#2022-02-2520:24Noah Bogartgreat name haha#2022-02-2520:25Cora (she/her)the name is chef_kiss#2022-02-2520:25Cora (she/her)(and the library looks super useful)#2022-02-2717:02andy.fingerhutStuart Sierra did all the work here, then announced it in the Clojure Google group. I am simply copying the announcement here, for those people who might notice it here but not there: The first change in almost 2 years — it's a new release of Component! https://github.com/stuartsierra/component is a tiny framework for starting and stopping many stateful resources in the right order. This release adds the https://github.com/stuartsierra/component/blob/component-1.1.0/README.md#subsystems. https://github.com/stuartsierra/component/blob/master/CHANGES.md Leiningen project.clj: [com.stuartsierra/component "1.1.0"] deps.edn: com.stuartsierra/component {:mvn/version "1.1.0"}#2022-02-2718:17steffanI am very pleased to announce the first release of clj-otel, a small idiomatic Clojure API for adding telemetry to your libraries and applications using OpenTelemetry, an emerging standard for telemetry in cloud-native software enabling effective observability. Follow-up in channel #clj-otel https://github.com/steffan-westcott/clj-otel#2022-02-2809:56oliyI'm pleased to announce a new release of martian with lots of improvements around OpenAPI handling. martian is an abstraction over HTTP that uses OpenAPI/Swagger/your own interface definitions to simplify interactions with remote systems. An interceptor chain means it can be easily extended, it has built-in support for all the most popular HTTP clients and also has companion libraries for recording/playback, generative testing and more. https://github.com/oliyh/martian This release adds support for: • OpenAPI server URLs directive https://github.com/oliyh/martian/pull/129, thanks https://github.com/bombaywalla • OpenAPI yaml definitions https://github.com/oliyh/martian/pull/132, thanks https://github.com/bombaywalla This release fixes: • Incorrect errors of disallowed keys for OpenAPI bootstrapped instances https://github.com/oliyh/martian/issues/126 • The internal martian spec of an input schema to allow optional keys https://github.com/oliyh/martian/pull/138, thanks https://github.com/chopptimus • OpenAPI parameters defined in a `$ref` https://github.com/oliyh/martian/issues/112https://github.com/oliyh/martian/issues/142 • Nested objects with optional keys in Swagger bootstrapped instances https://github.com/oliyh/martian/issues/111 • Interpretation of the `number` leaf schema https://github.com/oliyh/martian/pull/146, thanks https://github.com/bombaywalla • Interpretation of untyped schemas that have `properties` as objects https://github.com/oliyh/martian/pull/148, thanks https://github.com/bombaywalla This release improves: • The main readme and the https://github.com/oliyh/martian/tree/master/vcr, thanks https://github.com/rgkirch #2022-02-2812:22fmnoiseLet me introduce https://github.com/fmnoise/coldbrew - easy to use Clojure wrappers for https://github.com/ben-manes/caffeine We're already running that in production for 4 months with no issues, I hope you'll enjoy it too 🙌#2022-02-2815:39dharriganoooh, very nice! I used caffeine a lot when using java and kotlin#2022-02-2815:39dharrigannice to see it here too!#2022-03-0112:38mbjarlandYes indeed, been looking for a lib for caffeine for some time. Excellent work!#2022-03-0117:00Ben Slessquestion, (although I work at AppsFlyer, I have no particular investment in this project), why not use https://github.com/AppsFlyer/cloffeine? Were you unaware of it? was something missing? Did you dislike something about the design?
#2022-03-0117:08fmnoise@UK0810AQ2 I just needed tool for my use case, not a clojure api wrapper for Caffeine (I don't see any issues doing java interop tbh) My use case is: I have lacinia graphql resolver (or any other function) and I need to make it cacheable (with expiration and conditions) with minimum amount of code changes. And remove caching with the same minimal amount of code changes. That's how defcached was born 😎#2022-03-0117:13Ben Sless@U4BEW7F61 I have a personal itch to write something that is compatible with core.cache and core.memoize but I haven't had a need to use caffeine yet#2022-03-0117:15fmnoiseI used caffeine previously, it's very good. core libs should be fine too I guess#2022-03-0118:04roklenarcicI wrote my memento library to address my caching needs via guava but it seems that caffeine is superior#2022-03-0118:04roklenarcicWasnt aware of its existence#2022-02-2820:16Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.10.3.1087 is now available • Fix error message when git url missing or not inferred • Pass :exec-fn and :exec-args to -X/-T even when using -Scp • https://clojure.atlassian.net/browse/TDEPS-222 Make Clojure dependency in pom a compile dependency, not provided • https://clojure.atlassian.net/browse/TDEPS-203 In -X:deps prep - now takes basis settings, including aliases • https://clojure.atlassian.net/browse/TDEPS-197 -X:deps git-resolve-tags - now resolves to :git/tag and :git/sha • -X:deps tree - now takes basis settings • -X:deps mvn-pom - now takes basis settings • -X:deps list - put license abbreviation list in a resource and load on demand#2022-02-2822:14Carsten Behringhttps://clojars.org/scicloj/scicloj.ml 0.2.0 is now available • handling of categorical predictions targets is now fully pushed down to implementing models All plugins were updated accordingly.#2022-02-2822:16Carsten BehringThe DJL plugin for is available in new version 0.1.9: • initial support for fasttext was added for text classification tasks https://clojars.org/org.scicloj/scicloj.ml.clj-djl#2022-03-0106:11kingmobAnnouncing the first public release of https://github.com/KingMob/TrueGrit (v1.0.5), a data-driven, idiomatic way to use Resilience4j in Clojure. For when you need functions that don’t give up at the first sign of failure! Includes circuit breakers, bulkheads, retry policies, timeouts and rate limiters. It’s been battle-tested in production for years.#2022-03-0108:59mpenetNew https://github.com/exoscale/coax released (fixes cljs warnings) - coax is a library to allow input coercion from spec definitions#2022-03-0209:58borkdudeProcess, a Clojure wrapper for java.lang.Process v0.1.1: Similar to tools.build.api/process, it now supports appending output to files (previously it only supported writing). To reduce cognitive overhead between libraries, process adopted the same convention: • feat https://github.com/babashka/process/issues/44: ◦ Support :out + (`:write` / :append) and :out-file + file ◦ Support :err + (`:write` / :append) and :err-file + file https://github.com/babashka/process For questions, go to #babashka#2022-03-0217:00pezA missing piece in Calva was highlighted by @daslu: We didn't treat metadata as part of the form to be evaluated. I've spent some days of work convincing Calva to do the right thing here. Resulting in Calva v2.0.247, which also contains some more of @corasaurus-hex’s wonderful work with making the project more maintainable: • https://github.com/BetterThanTomorrow/calva/pull/1564https://github.com/BetterThanTomorrow/calva/pull/1551 #2022-03-0218:38Carsten BehringNew version of .clj-djl released. • It allows to configure the fasttext training with all options https://clojars.org/org.scicloj/scicloj.ml.clj-djl#2022-03-0315:00eccentric JCreated interactive babashka and node-babashka templates on replit • https://replit.com/@eccentric-j/Babashka-Clojure-Template?v=1https://replit.com/@eccentric-j/Node-Babashka-ClojureScript-Template?v=1 They are ready to fork, explore, and build all sorts of cool projects with that can be embedded and shared all around.#2022-03-0317:41borkdudeSCI configs: https://github.com/babashka/sci-configs A collection of ready to be used SCI configs This repo includes SCI configurations for: • reagent • promesa • js-interop and more to come.#2022-03-0322:35practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user level aliases for Clojure CLI projects and community tools - library dependency updates and alias additions • graph/ns-deps shows connections between library dependencies and the namespace • graph/deps now uses tools.deps.graph to show relationship between library • :lib/pprint-sorted alias to include the https://github.com/greglook/puget when starting a REPL session, enabling sorted keys and set values when pretty printing and colour highlighting • :lib/sayid include https://github.com/clojure-emacs/sayid as a dependency to support provide REPL driven debugging and profiling (also useful if running a repl for cider-connect or other tools that have a sayid plugin) • github actions - update checkout to v3 • Update library versions using :project/outated alias (including the latest reveal (free) version - see below In the next release I'll be moving some aliases under the :search/ qualifier and then move on to looking at tools.build#2022-03-0409:35vlaaadreveal New versions of Reveal — https://vlaaad.github.io/reveal/ and https://vlaaad.github.io/reveal-pro — are out! 🎉 This release was possible thanks to https://www.clojuriststogether.org/'s funding. This release introduces a new https://vlaaad.github.io/reveal/#test-runner, including: • UI to run and re-run tests and view results in a structured tree output; • Jumping between errors using Alt+Up/Alt+Down — no need to scroll through kilometers of output; • Contextual test action on namespaces and vars to make running tests easier; • Out-of-the box diffing for 2-element tuples and maps with :expected/`:actual` keys; • test sticker window that can be configured to run tests on the classpath (all or filtered like in cognitect's test runner) — see https://github.com/vlaaad/reveal/blob/ec0baafe8da61a8144bfd9b7741d029b75c3be0f/src/vlaaad/reveal.clj#L525-L559; Discuss in the thread here or in #reveal#2022-03-0409:41vlaaadOne more improvement that was possible thanks to work on test runner is generic https://github.com/vlaaad/reveal/blob/ec0baafe8da61a8144bfd9b7741d029b75c3be0f/src/vlaaad/reveal.clj#L641-L665 component that can be used to define tree-looking inspectors. One example of how it works is the updated java-bean action that shows java beans as tree, making it much easier to explore java object graphs:#2022-03-0410:09Dumchsory if the question is inappropriate in this thread, but is it possible to “jump” into the reveal window and manipulate cursor with vim (or ideavim)?#2022-03-0410:33vlaaadI'm not sure I understand the question, what do you mean by "jumping"? Changing focus?#2022-03-0410:37vlaaadIf you are talking about interacting with reveal from another window, there is a https://vlaaad.github.io/reveal/#interacting-with-reveal-from-code, but it has higher granularity than manipulating cursors#2022-03-0410:39Dumchlets imaging we have focus on the reveal window. Can we use vim bindings to manage our cursor? Or at least be able to select some text with keybindings (without the mouse)?#2022-03-0411:06vlaaadvim keybindings — no, using keyboard for everything in Reveal window — yes#2022-03-0412:43walterl@UL05W6AEM https://vlaaad.github.io/reveal/#navigation#2022-03-0409:54Lucy WangHi there, clj-statecharts, the state machine and statecharts library for clojure/clojurescript, has released 0.1.2 . https://github.com/lucywang000/clj-statecharts Relevant changelog:
## v0.1.2 2022/3/1

- support eventless transitions on initial states
- update malli to 0.8.3
#2022-03-0414:25eskosAnnouncing first wide public release of lein-git-revisions 0.3.0, a yet-another-solution to using Git as source for your Leiningen project version! Main differences to prior art are extreme configurability and zero required interaction after initial setup. Supports SemVer, CalVer, direct git metadata, automatic version incrementing, environment injection, conditional metadata and just about everything else, really - it’s all just configuration. Code-to-documentation ratio is about 2:3 🙂 https://github.com/esuomi/lein-git-revisions#2022-03-0414:28eskosA few quick notes: • Yes, this is probably very overengineered which may make it a bit hard to grok. Just ask! 🙂 • I don’t claim superiority to others, this is merely a new funky flavor of versioning ice cream - I kinda don’t have a proper story/reasoning why I even made this, I had a minor problem a few weeks ago and then it just kinda escalated… • As always, all feedback is highly appreciated! 🙇 #2022-03-0414:33borkdudeclj-kondo v2022.03.04 New • https://github.com/clj-kondo/clj-kondo/issues/1240: Add linter :namespace-name-mismatch to detect when namespace name does not match file name. (https://github.com/svdo) Fixed • https://github.com/clj-kondo/clj-kondo/issues/1598: :scope-end-row is missing on multi-arity fn args (https://github.com/mainej) • https://github.com/clj-kondo/clj-kondo/issues/1588: analyze type hint in reified method • https://github.com/clj-kondo/clj-kondo/issues/1581: redundant fn wrapper false positive when using pre-post-map • https://github.com/clj-kondo/clj-kondo/issues/1582: False positive Insufficient input when using symbol call • https://github.com/clj-kondo/clj-kondo/issues/1579: relax linting in tagged literal forms • https://github.com/clj-kondo/clj-kondo/issues/1578: allow :deprecated-var config in ns form metadata • https://github.com/clj-kondo/clj-kondo/issues/892: suppress unresolved namespaces in data readers config • https://github.com/clj-kondo/clj-kondo/issues/1594: lint clojure.test.check.properties/for-all as let Channel: #clj-kondo#2022-03-0418:34AkizWhy it might be the last one? 😨 #2022-03-0418:49borkdudeI guess I watched the news too much this week...#2022-03-0418:53borkdudeI removed that comment ;)#2022-03-0511:03AkizOh, I was afraid you had health problems or something like that. #2022-03-0511:06borkdudeLuckily nothing that prevents me from doing my work#2022-03-0414:53mkvlrClerk – Local-first notebooks for Clojure – {:mvn/version "0.6.387"} has been released on https://clojars.org/io.github.nextjournal/clerk. Highlights in this release: • Add clerk/recompute! for fast recomputation of doc without re-parsing & analysis. See the video below for small apps you can now build with this, or the https://github.com/nextjournal/clerk-demo/blob/main/notebooks/dictionary.clj. • 👁️ Normalize the viewer api to support full map form everywhere, see https://github.com/nextjournal/clerk-demo/blob/main/notebooks/controls.clj for an intro. • 🧮 Add reagent and js-interop to viewer api, see how to https://twitter.com/mkvlr/status/1499470942585688065 for a given result • 📊 Add d3-require to the viewer api. Example of defining a https://snapshots.nextjournal.com/clerk/build/fc297cb8b1cd879c888f573d1c7913dafd1d66dd/index.html#/notebooks/viewer_d3_require.clj:ladybug: Various bugfixes and other improvements, full https://github.com/nextjournal/clerk/blob/main/CHANGELOG.md#06387-2022-03-03! For follow-up, I’ve just created #clerk. Here’s some 🐦 https://twitter.com/mkvlr/status/1499470357262127106 announcing the release, RTs very much appreciated! 🙏. P.S. Clerk turned one yesterday, by https://github.com/nextjournal/clerk/commit/21b84c4d37b036a2a8ed438a834610da25992df7. 🎂#2022-03-0422:20uochanJust released antq ver 1.6.0, Tool to point out your outdated dependencies. https://github.com/liquidz/antq Supported running behind proxies, and checking/upgrading installed Clojure CLI Tools:relaxed:#2022-03-0500:49wilkerlucioPathom 3 2022.03.04-alpha is out! https://clojars.org/com.wsscode/pathom3 • Add support for ::pco/batch-chunk-size to control how many items to batch at once • Batch process retains input order when making batch calls New docs for the batch chunk feature: https://pathom3.wsscode.com/docs/resolvers/#batch-in-chunks Also new section about batch in parallel: https://pathom3.wsscode.com/docs/resolvers/#batch-in-parallel-processor#2022-03-0709:46oliyAnnouncing fixa - better test fixtures https://github.com/oliyh/fixa Why does clojure.test limit us to a single set of :each and :once fixtures for all tests in a namespace? Shouldn't we have the granularity of being able to apply particular fixtures to an individual test? fixa lets you define fixtures at the individual test level using a simple metadata notation.
(deftest ^{:fixa/fixtures [fixture-a fixture-b]} multiple-fixtures-test
  (is (= 1 1)))
You can use it with clojure.test and kaocha runners, see the readme for details. Any feedback welcome!
#2022-03-0717:01bozhidarCIDER 1.3 ("Ukraine") is out! More details - https://github.com/clojure-emacs/cider/releases/tag/v1.3.0#2022-03-0717:28craftybonesHope your family is doing well @U051BLM8F#2022-03-0718:21bozhidarThanks! So far they are still safe.#2022-03-0718:51AndriiThanks for the support!#2022-03-0812:40kinleydWonderful release name. Slava Ukraini. :flag-ua:#2022-03-1311:38fmnoisethank you for support @U051BLM8F :flag-ua:#2022-03-0721:58Jakub Holý (HolyJak)Announcing the first alpha release of the https://github.com/cljdoc/cljdoc-check-actionhttps://github.com/cljdoc/cljdoc-check-action (v0.0.3) that runs CljDoc analysis on your project and fails if that fails - to make sure that you do not publish a version that http://cljdoc.org will not be able to import. Using it can be as simple as
# build your target/*.jar
- name: Check CljDoc
  uses: cljdoc/
- see the README for details. Many thanks to @lee and his indispensable help! This is an alpha release. It seems to be working but e.g. I have not tested it on a broken project. Please try it out and report any problems! 🙏
#2022-03-0722:00ericdallooh, that's very handy!#2022-03-0722:02Jakub Holý (HolyJak)I hope so!#2022-03-0722:57vemvMuch useful! Was thinking of requesting the same upstream :)#2022-03-0723:16lreadAnd we’ll likely eventually add more checks. Like a decent doc/cljdoc.edn linter.#2022-03-0809:13mpenetnew https://github.com/exoscale/ex release (0.4.0) - removed validation of ex-data contents in ex/try+ and ex/ex-info#2022-03-0814:44Alex Miller (Clojure team)Have you filled out the 2022 State of Clojure survey yet? If not, please do! https://www.surveymonkey.com/r/clojure2022#2022-03-0909:47borkdudeobb v0.0.3 released: Ad-hoc ClojureScript scripting of Mac applications via Apple's Open Scripting Architecture. https://github.com/babashka/obb/blob/main/CHANGELOG.md#003---2022-03-09 channel: #obb#2022-03-0918:40Grant Horneryou are an absolute machine#2022-03-0921:30Mnooh boy better get started on that new logo kappa#2022-03-0919:51blueberryNew release 0.22.0 https://github.com/uncomplicate/deep-diamond#2022-03-1015:55Alex Miller (Clojure team)just a reminder, tomorrow is the last day for the annual Clojure survey and we'd appreciate your response if you haven't completed it yet! https://www.surveymonkey.com/r/clojure2022#2022-03-1018:09HuahaiDatalevin 0.6.0 is released. This is a major release with the addition of a full-text search engine, as well as a number of other improvements. Please note that data migration may be needed to upgrade to this release. https://github.com/juji-io/datalevin#2022-03-1018:19Cora (she/her)congrats! this is awesome!!#2022-03-1110:08plexusWe've released cljbox2d, an idiomatic Clojure/ClojureScript wrapper for the jBox2D/Planck.js physics engines, with some helpers to combine it with Quil. See the README for how to run the demos. Documentation is still a bit sparse but there's example code to start from. Happy to answer questions in #quil https://github.com/lambdaisland/cljbox2d#2022-03-1110:09plexusTry it at home:
clojure -Sdeps '{:deps {com.lambdaisland/cljbox2d {:mvn/version "0.4.19"} quil/quil {:mvn/version "4.0.0-SNAPSHOT"}}}' -M -m lambdaisland.cljbox2d.demo.simple-shapes
#2022-03-1110:17plexus#2022-03-1113:09Noah BogartThis is so cool! #2022-03-1115:21plexus@U1EP3BZ3Q also demonstrated how to use it with Clojure2D! https://github.com/Clojure2D/clojure2d-examples/tree/master/src/box2d#2022-03-1409:42BorisKourtLove seeing the ecosystem grow like this : )#2022-03-1118:52Daniel SlutskyFollowing our discussion at #visual-tools meeting 3 (the video will be public soon), here is an experiment combining Portal, Clerk, Kindly, and nREPL in one flow. It demonstrates using one Clojure namespace and comfortably visualizing it in different tools (Portal and Clerk in this case), without any need of code change. https://github.com/scicloj/visual-tools-experiments/tree/main/portal-clerk-kindly-nrepl-1#2022-03-1119:06flowthingLooks interesting! The link to Kindly is dead, though.#2022-03-1119:15Daniel Slutskyfixed, thanks 🙏#2022-03-1119:42Daniel Slutsky(fixed, forgot it was a private repo) 🙏#2022-03-1317:42Daniel SlutskyAdded a video to clarify the experiment: https://www.youtube.com/watch?v=e3M4u1XIVTo#2022-03-1121:25Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.8.1 is now available • compile-clj - TBUILD-29 - add support for setting bindings during compilation#2022-03-1121:29Noah BogartHot damn! What a quick turn around. Thanks Alex! #2022-03-1122:06borkdudeI guess this allows something to check
*warn-on-reflection*
stuff globally too :)
#2022-03-1214:53mkvlrthank you for this!#2022-03-1319:30borkdudeBabashka 0.7.8! This release improves compatibility with several libraries: https://github.com/aysylu/loom, https://www.hugsql.org/ and https://github.com/redplanetlabs/specter! To use specter in babashka, use the following coordinates:
{:deps {com.rpl/specter {:git/url ""
                         :git/sha "8ba809a2cd35d3b6f8c5287e6bd3b4e06e42f6dc"}}}
Hopefully the compatibility commit can be upstreamed back into specter at some point. • Add clojure.data.priority-map as built-in library - this makes babashka compatible with https://github.com/aysylu/loom • Add part of clojure.tools.reader.reader-types to support https://www.hugsql.org/https://github.com/babashka/babashka/issues/1204 add property babashka.config to reflect bb.edn location (https://github.com/mknoszlig) • Several fixes and enhancements to run Red Planet Lab's https://github.com/borkdude/specter/commit/8ba809a2cd35d3b6f8c5287e6bd3b4e06e42f6dc library in babashka • https://github.com/babashka/babashka/issues/1199: support print-method impls on records • babashka.fs: add windows? predicate • SCI: add *clojure-version* and (clojure-version) • Add java.util.zip.Deflater and java.util.zip.DeflaterOutputStream • SCI: implement declare as macro • https://github.com/babashka/babashka/issues/938: drop location metadata from symbols, except top level Full changelogs: https://github.com/babashka/babashka/blob/master/CHANGELOG.md Channel: #babashka
#2022-03-1412:44borkdudeGrasp: grep Clojure code using clojure.spec regexes Version 0.0.3 is out, the first release after a long time. JVM library:
io.github.borkdude/grasp {:mvn/version "0.0.3"}
Binaries are now released to Github releases. Also new in v0.0.3:
:keep-fn (fn [{:keys [spec expr uri]}] ...)
can be used to determine the result shape and save conformed values. Thanks to @mkvlr. https://github.com/borkdude/grasp Channel: #grasp
#2022-03-1413:20mkvlrhttps://github.com/borkdude/grasp#depsedn might want a bump still#2022-03-1413:21borkdudedone#2022-03-1508:24Vincent CantinA tiny (~50 LOC) cross-platform CLJC library which parses html into an AST, and then converts it to hiccup. A very good starting point for any html hacking (easy to fork and edit). https://github.com/green-coder/html-to-hiccup#2022-03-1512:25Noah BogartI saw you post the gist on Twitter. Glad you turned it into a full library! #2022-03-1512:26Vincent CantinThx. I think a library makes it easier to maintain and link to it.#2022-03-1512:27Vincent CantinThe lib has a place for automated tests as well.#2022-03-1610:55rickmoynihanThis looks great 👏 Presumably the parser is much more strict on well formedness than html5 and browsers? Regardless this looks very useful!#2022-03-1713:44Vincent CantinI would say that it is less strict than the browser. For example, there is no check that a closing element has the same tag as its opening element. The parser is not supposed to be used to validate html, just to convert it when it is assumed to be correct.#2022-03-1713:46Vincent CantinBy the way, I released the version 0.1.3 with the new helper function minify-hiccup. To know how it works, see its unit tests.#2022-04-1604:25Cora (she/her)also maybe useful for the same thing is hickory, I think?#2022-04-1805:48Vincent CantinHickory in CLJS nequires the DOM nodes of a browser for the parsing. This one doesn't.#2022-04-1807:27Cora (she/her)oh!! very excellent point!!#2022-03-1601:34pfeodrippeAnnouncing the first release of Dinâmico (v0.0.6). Program a mobile app using Clojure (backend) with Flutter (boilerplate included) as the presentation layer. • Reified (oh no, that word again) functions for easy lookup of parameters ◦ (-dn/doc dn/decorated-box :decoration :boxShadow :blurStyle) ;; => [:schema {:registry {}} [:enum :inner :normal :outer :solid]] • Malli schemas automatically derived (amazonica-like) ◦ The library is a thin wrapper over https://pub.dev/packages/json_dynamic_widget where the json schemas are fetched from • Hot reload using your usual code environment (the thin layer in Dart just has to pull data regularly while in development) https://github.com/pfeodrippe/dinamico#2022-03-1605:52pezThis is mind blowing. I must play with it!#2022-03-1610:46borkdudeIf you want to ship your Clojure backend code to your mobile, you might also be able to use this approach: https://gist.github.com/ericnormand/aefbaace9b3731b26dd4dff770565271#2022-03-1611:09pfeodrippeNice one, @U04V15CAJ!#2022-03-1619:46Dumch@U5R6XUARE, do you have some example app? I wonder how to model complex ui with this approach, how handle clicks#2022-03-1619:50pfeodrippe@UL05W6AEM Take a look at https://pub.dev/packages/json_dynamic_widget, it has a concept of registry which you can use for it. Dinâmico just returns a map which json_dynamic_widget understands o/#2022-03-1612:43mpenetnew https://github.com/exoscale/coax release (record coercion related bugfix)#2022-03-1614:19Sam RitchieHey all! I’ll be giving three talks in Portugal next week, all of which will be streaming online. I’d love if you’d come watch! At the https://european-lisp-symposium.org/2022/index.html: “Building SICMUtils, the Atelier of Abstractions” and a keynote, “Lisp as Renaissance Workshop: A Lispy Tour through Mathematical Physics”, and at <https://2022.programming-conference.org/%7C&lt;programming> 2022>, https://2022.programming-conference.org/details/programming-2022-Keynotes/3/The-Road-to-Reality-Interactive-Physics-from-Eval-to-Einstein Expect lots of Clojure pitching and love, and discussion of #sci, #sicmutils, #clerk, #clojurescript, #visual-tools and some horn-tooting about how great our community feels to be a part of.#2022-03-2317:31Sam RitchieTwo down, one to go! Talks and slides posted here: https://clojurians.slack.com/archives/C8NUSGWG6/p1648056352518449#2022-04-1122:58Darrick WiebeHey! Do you know if any of your talks will appear on youtube or be otherwise available to watch later?#2022-04-1417:17Sam Ritchie@U01D37REZHP just seeing this, yes, two are available and the third was similar enough to the first that you won't miss much #2022-04-1417:18Sam RitchieHere are the links: https://clojurians.slack.com/archives/C8NUSGWG6/p1648056352518449#2022-04-1417:18Sam RitchieThanks for asking!!#2022-04-1418:10Darrick WiebePerhaps I'm missing something since I don't normally use Twitch, but both of the video links appear to be dead.#2022-04-1418:11Sam RitchieOh no! I didn't realize. I'll see what I can find out about how to get those back up, or where the links will live. Sorry; didn't click them to test myself #2022-04-1418:14Darrick WiebeHope you can find them!! 🙂#2022-03-1712:54genmeblogWadogo scales - Clojure implementation of d3 scales. I've just released documented version of the library. It's still SNAPSHOT (depends on snapshot version of fastmath), but can be treated as a beta. https://github.com/scicloj/wadogo Documentation is created with #clerk https://scicloj.github.io/wadogo/index.html#2022-03-1713:06fmnoiseHi everyone! https://github.com/fmnoise/flow is released. No much additions, but rather some code cleanup as well as fixes to documentation and examples (thanks to @onetom for that).#2022-03-1715:12Noah BogartI’ve not seen this before, it looks cool as hell! #2022-03-1716:02Joshua Suskalowould highly recommend! flow is fantastic#2022-03-1717:50slimslenderslacksJust created a new https://github.com/atomisthq/jibbit - here's the https://github.com/atomisthq/jibbit/blob/main/CHANGELOG.md - some bug fixing (thanks @kolstae) and starting to look at supporting a https://skaffold.dev/docs/ for clojure applications running on kubernetes (thanks @mruzekw).#2022-03-1720:42borkdude#nbb, scripting for Clojure on Node.js via SCI, v0.2.8 is out Major new additions since v0.1.6: • REPL auto-complete implementation. See demo in Calva https://twitter.com/borkdude/status/1504556504116047877 • Improvements around promises: https://github.com/funcool/promesa has new macros and an experimental top level nbb.core/await function to ease exploring async code in the REPL. Try it out on your system with:
npx 
Full changelogs: https://github.com/babashka/nbb/blob/main/CHANGELOG.md If you want to hear more about #nbb, next week I'm giving a talk about it at London Clojurians! https://www.meetup.com/en-AU/London-Clojurians/events/282138836/
#2022-03-1817:49borkdudeSpecter 1.1.4 https://github.com/redplanetlabs/specter/blob/master/CHANGES.md#114 Thanks @nathanmarz#2022-03-1818:09borkdudeThis release, among other things, adds compatibility with babashka:
(require '[babashka.deps :as deps])

(deps/add-deps '{:deps {com.rpl/specter {:mvn/version "1.1.4"}}})

(require '[com.rpl.specter :as s])

(s/transform [(s/walker number?) odd?] inc {:a 1 :b [1 2 3]}) ;;=> {:a 2, :b [2 2 4]}
#2022-03-1818:19slimslenderslacksThis is very exciting - two awesome tools, and now together!#2022-03-1821:10wilkerlucioany plans to make something like this for #meander? would really love that 🙂#2022-03-1821:17borkdude@U066U8JQJ with specter I was able to make it run without big changes. with meander, I think I will run into the same issues as with pathom: custom data structures that implement a ton of Java interfaces#2022-03-1821:19wilkerluciogotcha, I remember the new version they are making has less of that, maybe this will be the one to work with Babashka#2022-03-1821:19wilkerluciobut Pathom, besides the smart maps, everything else already works on Babashka 🙂#2022-03-1821:20borkdudealways worth a shot :)#2022-03-1821:32borkdudeApart from a reflection issue (.indexOf ...) the meander.match.epsilon namespace seems to load.
$ clojure -M:babashka/dev -cp src -e "(require '[meander.match.epsilon])"
#2022-03-1821:33borkdude
(require '[meander.match.syntax.epsilon])
also works
#2022-03-1821:33borkdude
(require '[meander.rewrite.epsilon])
also works
#2022-03-1821:36borkdude@U066U8JQJ It seems all necessary namespaces for meander.epsilon load, I just get one error in the ns itself, will look into it.#2022-03-1821:36borkdudeWe can take the discussion elsewhere maybe.#2022-03-1821:43borkdude@U066U8JQJ Wow, it works, if I comment out defsyntax with !
$ clojure -M:babashka/dev -cp src -e "(require '[meander.epsilon :as m])
dquote>
dquote>
dquote> (defn favorite-food-info [foods-by-name user]
  (m/match {:user user
            :foods-by-name foods-by-name}
    {:user
     {:name ?name
      :favorite-food {:name ?food}}
     :foods-by-name {?food {:popularity ?popularity
                            :calories ?calories}}}
    {:name ?name
     :favorite {:food ?food
                :popularity ?popularity
                :calories ?calories}}))
dquote>
dquote> (def foods-by-name
  {:nachos {:popularity :high
            :calories :lots}
   :smoothie {:popularity :high
              :calories :less}})

(favorite-food-info foods-by-name
  {:name :alice
   :favorite-food {:name :nachos}})"

{:name :alice, :favorite {:food :nachos, :popularity :high, :calories :lots}}
#2022-03-1821:44wilkerlucio:star-struck:#2022-03-1821:44wilkerluciowow, that's awesome, Meander is one of libs that I miss the most when using Babashka#2022-03-1821:46wilkerluciolong way, seems like all the fixes for other things are almost making Meander works 🙂 @U5K8NTHEZ @U06MDAPTP#2022-03-1821:49jimmyAll credit to @U06MDAPTP#2022-03-1822:18borkdudeGoing to dig into why this error with defsyntax with happens (unresolved symbol, some gensym) but it seems promising. :-D#2022-03-1822:41borkdudeFound the issue#2022-03-1823:15borkdudeI'm hitting a couple of reflection issues. E.g. .without on clojure.lang.IPersistentMap etc, gotta add those in bb explicitly#2022-03-1823:16borkdudenot sure why that low level interop is necessary, small perf gain?#2022-03-1823:16borkdude(in bb it will be much slower)#2022-03-1823:20borkdudebut I'll try to support it so meander doesn't have to change anything#2022-03-1823:26borkdude@U066U8JQJ I pushed a commit which makes the above example work. Binary will be in #babashka-circleci-builds in 10 minutes or so. Probably needs more testing, will do so tomorrow. This is really cool!#2022-03-1823:40borkdude
bash <(curl ) --version 0.7.9-SNAPSHOT --dir .

(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {meander/epsilon {:mvn/version "0.0.650"}}})
(require '[meander.epsilon :as m])
(m/find [1 2] [?x ?y] ?y [?x ?y ?z] ?y) ;;=> 2
The good news is that it works. The bad news is that the loading of the lib takes quite long due to the amount of code.
#2022-03-1823:51wilkerlucioyou rock man! I'm in the middle of a thing from work today, but I'll be happy to test it next week 🙂#2022-03-1914:08borkdude@U066U8JQJ I invited you to #babashka-sci-dev - let's continue there. There are a couple of things like r/gather which result in unexhaustive matches.#2022-03-1823:30jacob.mainehttps://github.com/mainej/re-stated 0.2.25 Small but flexible tool for managing clj-statecharts state machines within a re-frame app. Comes with many examples where state machines can simplify a domain: • tracking status of HTTP requests • navigating wizards • recording input field interaction history#2022-03-1823:38p-himikAlright, this is now a fourth library that I know of that adds statechart to re-frame. Seems like I should finally give statecharts a go. :D If anyone's interested, the other libraries (apart from clj-statecharts built-in re-frame integration) are: • https://github.com/jiangts/re-statehttps://github.com/MaximGB/re-statehttps://github.com/ingesolvoll/re-statecharts#2022-03-1900:36jacob.maine@U2FRKM4TW that’s right, there are a ton of options! You haven’t even touched on https://github.com/fulcrologic/statecharts, or any of the many other state machine libraries and their re-frame integrations. I’m partial to re-stated because: • it’s small—70 loc, no macros • it comes with lots of docs and examples • and it doesn’t try to be The Way to Structure Your App; it’s just a thin adapter between re-frame and clj-statecharts#2022-03-1900:44Carsten Behringhttps://clojars.org/clj-py-r-template/clj-template 1.7.0 Polyglot clj template with python, R and others working out-of-the-box with Docker Changes in 1.7.0: • libraries upgraded • Clerk added#2022-03-2009:12Sam Ritchiev0.22.0 of the #sicmutils computer algebra system is out. The main highlight is that compiled functions are now 10x or so faster, thanks to me getting out of the way of Clojure’s numerical optimizations. Whoops! • Clojars: https://clojars.org/sicmutils/sicmutils • detailed release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.22.0 • Physics demos powered by #clerk, Mathbox and #sicmutils: https://twitter.com/sritchie/status/1503220063264026629 This release is prep for a series of talks in Portugal that use #sicmutils for slide generation and in a bunch of interactive demos with #clerk. That code lives here if you want to play: https://github.com/sritchie/programming-2022 Cheers!#2022-03-2106:45kingmobAfter 4 years since the last major update, Aleph 0.4.7 is now available, containing many lovely bug fixes and updated dependencies! https://clojars.org/aleph/versions/0.4.7#2022-03-2110:02borkdudeExcellent! Thank you! For completeness, here are the changelogs: https://github.com/clj-commons/aleph/blob/master/CHANGES.md#047#2022-03-2112:03kingmobThx, borkdude!#2022-03-2122:21Hugh PowellHell yes! Thankyou 🙂. We've had issues with Aleph 0.4.6 and the AWS SSO libraries. This should fix that :thumbsup:#2022-03-2203:12kingmob@UB2GLDEN8 Did you try any of the alpha releases over the years? I don't recall any commits specifically relating to AWS SSO, so please let us know on GH if there are still issues. #2022-03-2203:14Hugh PowellYeah, the latest alpha releases were looking good. I'll open GH issues if we run into anything as we upgrade.#2022-03-2203:14Hugh PowellIt was mostly to do with mis-matched versions of netty I think.#2022-03-2203:27kingmobHmmm. I’m planning to give it a week or so, then we’ll bump up Netty to the latest version. It’s still a bit behind#2022-03-2118:19fogus (Clojure Team)New Cognitect Labs aws-api service APIs available! CHANGES - new endpoints version 1.1.12.181 - Updated services versions v820.2.1083.0 and v820.2.1096.0 pushed - new AWS service APIs available: billingconductor, keyspaces README: https://github.com/cognitect-labs/aws-api/ API Docs: https://cognitect-labs.github.io/aws-api/ Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn#2022-03-2118:29javahippieWe have just published a very, very early first release of a Testcontainers plugin for kaocha https://github.com/lambdaschmiede/kaocha-testcontainers-plugin#2022-03-2119:17richiardiandreawow this is great, I have got a ton of code around it that might go away thanks to this thank you! 😅#2022-03-2119:57javahippieGreat to hear! It’s still early, we use it in our own applications, but I’d be happy to get your thoughts and feedback on this!#2022-03-2120:00richiardiandreaYeah we should sync one day, I'll have to compile the list of quirks and workarounds I had to go through at some point 😄#2022-03-2214:40practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user level aliases to add community tools to Clojure CLI across all your deps.edn projects • added https://github.com/practicalli/clojure-deps-edn#development-environment, providing more tools for REPL driven development ◦ :env/dev - add dev directory to class path - e.g. include dev/user.clj to https://practical.li/clojure/clojure-cli/projects/configure-repl-startup.html:lib/nrepl include nrepl as a library ◦ :lib/hotload - include org.clojure/tools.deps.alpha add-libs commit to https://practical.li/clojure/alternative-tools/clojure-cli/hotload-libraries.html:lib/tools-ns - include org.clojure/tools.namespace to refresh the current namespace in a running REPL ◦ :lib/reloaded - combination of hotload and tools-ns aliases ◦ :lib/pretty-errors - highlight important aspects of error stack trace using ANSI formatting • added https://github.com/practicalli/clojure-deps-edn#searching (moved existing search related aliases to :search category) ◦ -M:search/errors https://github.com/athos/clj-check.git - search each namespace and report compilation warnings and errors ◦ -M::search/unused-vars https://github.com/borkdude/carve - search code for unused vars and remove them - optionally specifying paths --opts '{:paths ["src" "test"]}'-M:search/libraries - https://github.com/hagmonk/find-deps - fuzzy search Maven & Clojars and add deps to deps.edn ◦ -T:search/outdated - https://github.com/liquidz/antq - check for newer versions of libraries, updating deps.edn if :update true passed as argument#2022-03-2215:55ambrosebsTutorials for using dependabot with https://github.com/frenchy64/dependabot-lein-via-mvn and https://github.com/frenchy64/dependabot-clojure-cli-via-mvn via Maven.#2022-03-2216:19Alex Miller (Clojure team)Clojure 1.11 is now available! https://clojure.org/news/2022/03/22/clojure-1-11-0#2022-03-2216:25pezThanks for improving my fav programming language! Wonderful to see all those community names among the contributors.#2022-03-2216:27match37Thank you! @U064X3EF3#2022-03-2216:28dharriganSeconded and thirded and fourthed....#2022-03-2217:41richiardiandreaThank you, exciting to see these new language features!#2022-03-2217:56Cora (she/her)yessss! very excited for all of this!!#2022-03-2218:00Cora (she/her)I'm guessing it's still being rolled out to all the installation sources?#2022-03-2218:04Alex Miller (Clojure team)there's only one source, and it's there#2022-03-2218:04Alex Miller (Clojure team)if you're asking about the Clojure CLI, that number will be bumped on the next release, which should be within the next week or so#2022-03-2218:05Alex Miller (Clojure team)the Clojure CLI version is independent of the Clojure version used in a project though (any version of the CLI can use any version of the language), it just affects what the default version you get is if you don't specify#2022-03-2218:10slipsetIn production#2022-03-2218:17Cora (she/her)yep, I meant the CLI version. thanks!#2022-03-2311:03rickmoynihanFantastic to see this out the door; some solid improvements!#2022-03-2221:24ribelorailway oriented programming for clojure & clojurescript, a functional approach to error handling. https://cljdoc.org/d/com.github.ribelo/fatum/0.0.20/doc/readme#2022-03-2308:39pezCalva, the beginner friendly Clojure IDE for VS Code, just updated. v2.0.257 changes: • Maintenance: https://github.com/BetterThanTomorrow/calva/pull/1605https://github.com/BetterThanTomorrow/calva/pull/1605https://github.com/BetterThanTomorrow/calva/pull/1605https://github.com/BetterThanTomorrow/calva/issues/1254 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1610 The most visible change is a more convenient Ux for connecting the REPL in monorepos, #polylith, etcetera. https://user-images.githubusercontent.com/30010/159653688-d59748a3-847f-499d-aa1f-d0343b70d11d.png Contributors: @corasaurus-hex, @brandon.ringe and I (me?)#2022-03-2312:47Daniel JompheThanks! It solves an issue we had. We don't have a monorepo (only one deps.edn), but we have multiple source trees. If we were in one of the dev alias' extra-paths, Calva didn't start the right thing until now. 🙂#2022-03-2312:54pezThanks for the feedback, @U0514DPR7! That situation sounds similar to what you have in a #polylith project.#2022-03-2313:51Jakub Holý (HolyJak)Awesome, thank you for your relentless work, @U0ETXRFEW!#2022-03-2316:13pezHere's a demo. https://www.youtube.com/watch?v=6Ba7c_MxT1E#2022-03-2514:59Alex Miller (Clojure team)should this have been 2.0.257 ?#2022-03-2515:15pezYes, thanks! Now fixed.#2022-03-2403:42Jon OlickProgress on jo_lisp https://github.com/Zelex/jo_lisp is going nicely. Still not near a 1.0 release, but definitely making dents on it feature parity. 1.0 will be near feature parity or full feature parity.#2022-03-2405:03Lucy WangHi there, clj-statecharts, the state machine and statecharts library for clojure/clojurescript, has released 0.1.3, which introduces the concept of "stores" as state containers (thanks to @jacob.maine's amazing contribution!) https://github.com/lucywang000/clj-statecharts Relevant changelog:
## v0.1.3 2022/3/17

- Structure scheduler to interoperate with data stores #10 (thanks to @mainej)
#2022-03-2814:49match37Does clj-statecharts support wildcard event? https://xstate.js.org/docs/guides/transitions.html#wildcard-descriptors#2022-03-2413:46Ivar RefsdalHi! Here is https://github.com/ivarref/healthy, a tiny library to simplify writing health checks. It provides a "sliding window" into your application's errors, allowing you to see if it recovers or not once an error has occured. Hope it is useful for someone. 😊#2022-03-2415:20nateHello everyone! Announcing the first open source release of Lighthouse, a data-driven Kubernetes pre-processor. Lighthouse merges EDN files in a directory tree with simple inheritance rules (along with access to Clojure via #sci), generating manifests in a flexible and reliable manner. Repo: https://github.com/barracudanetworks/lighthouse#2022-03-2419:04borkdudeNice! Added here: https://github.com/babashka/sci#projects-using-sci#2022-03-2419:35nateThank you!#2022-03-2509:06mdallastellaCan I get rid of Helm with this?#2022-03-2513:56Darin Douglassyep! if a 3rd party app still recommends using helm charts that’s what we chose to use. but for our own stuff we wrote lighthouse files instead#2022-03-2522:52leifericfCool! Fun coincidence: Today, I listened to episode 74 of your podcast, where you (@U0510902N and @U5FV4MJHG) were talking about deployment. Kubernetes (and YAML) was mentioned on several occasions. Then I see this post 😊#2022-03-2523:02neumann@U01PE7630AC Nice timing! Less YAML means happier me.#2022-03-2416:05cldwalkerHey! Announcing an initial release of lq, a commandline tool for querying logseq's knowledge graphs with datalog - https://github.com/cldwalker/logseq-query. Y'all will probably appreciate users can extend the tool's querying capabilities with EDN. datascript and babashka are an awesome match 🙂#2022-03-2513:24Adam HelinsLooks really awesome! As an avid logseq power user, I'm eager to try it out#2022-03-2523:37genmeblogFastmath 2.1.8 released. This release solves the issue with abs introduced in Clojure 1.11 (https://ask.clojure.org/index.php/11672/fastmath-errors-in-1-11) + some other minor bugs. Please do not use 2.1.7 version (deployed too early). Thanks @alexmiller for bringing this to my attention. https://github.com/generateme/fastmath#2022-03-2523:48genmeblogAlso, Clojure2d 1.4.4 is released (depends on fastmath). This version brings shape abstraction and contains revisited and updated clojure2d.color namespace. Please refer #clerk https://clojure2d.github.io/clojure2d/docs/notebooks/index.html#/notebooks/color.clj for a full reference. I believe this namespace covers almost everything needed for color operations (it can be used in #quil too, see https://clojure2d.github.io/clojure2d/docs/codox/clojure2d.color.html#var-quil ). Enjoy! https://github.com/Clojure2D/clojure2d#2022-03-2611:16javahippieWe release version 0.6.0 of clj-test-containers. It now supports all wait strategies that Testcontainers for Java supports, and we added a new configuration to specify a startup-timneout for every wait strategy. Also, you can now define a Clojure function which gets called every time there is a new log line in the started Docker container and we added in-detail documentation for the log- and wait-strategies. https://github.com/javahippie/clj-test-containers/releases/tag/0.6.0#2022-03-2614:52ericdalloclojure-lsp Released https://clojure-lsp.io/ 2022.03.25-12.02.59 with lots of improvements and a new Find implementations of feature! We had huge performance improvements on startup and cpu cost, multiple fixes and improvements on a lot of exisiting features and even new code actions! For more information, check #lsp#2022-03-2709:40Jakub Holý (HolyJak)Awesome with the defmulti impls! Just what I need!#2022-03-2615:40oxalorg (Mitesh)Hey all 🌸, never really posted updates about https://github.com/oxalorg/4ever-clojure here. The project is alive and kicking 💪 thanks to the awesome contributors: @borkdude, wooseopkim, sjongejongejonge, @porkostomus, @pradeep.bishnoi, pengx17, @humorless279 and many more! Recently we've made a lot of fixes and changes: deduped solutions, fixed some crazy SCI related stuff around infinite ranges, improved error stacktraces, enabled gzip and other perf improvements, fixed edge cased input field bugs, improved design, and more! Full changelog is available here: https://github.com/oxalorg/4ever-clojure/blob/main/CHANGELOG.md#2022-03-2621:08cheelHi All, Just released version 0.0.1 of a new graphics library for Clojure https://github.com/rorokimdim/mindra-clj Only 2D, fairly primitive, with only a small set of features. But I hope to build on it more. Some examples of what is already possible is in the README. Thanks!#2022-03-2621:11cheeland big kudos to @borkdude for babashka/process . I'm glad i didn't need to figure it out myself#2022-03-2700:58uochanJust released Dad ver 1.0.0, Small configuration management tool for Clojure. There are some breaking changes, but added support for babashka pods. These changes should make you less complicated to remember and easier to use ☺️ https://github.com/liquidz/dad#2022-03-2810:28Jakub Holý (HolyJak)It is awesome that Dad can be used as a pod. Now I only need to have #babashka installed. Will certainly check it out!#2022-03-2704:34ambrosebsTyped Clojure can reuse your malli schemas and spec1 specs as static types. • https://www.patreon.com/posts/static-type-64236939https://www.patreon.com/posts/64321657 #2022-03-2717:33mruzekwI'm guessing this includes specs beyond type-only checks?#2022-03-2722:53ambrosebs@U1RCQD0UE the restriction is that the spec must be mapped to a type that Typed Clojure supports. TBD how big a subset of specs that is in practice.#2022-03-2722:55ambrosebsbut potentially eg., s/keys => t/HMap, s/fspec => t/IFn . I'll be filling out more conversions, but right now the proof-of-concept only supports s/fspec + int?.#2022-03-2723:43mruzekwGot it. Thanks!#2022-03-2802:43eggsyntaxThat's awesome! 👏#2022-03-2802:36phronmophobicTryit: Create cli snippets for quickly trying clojure libraries. For example, if you wanted to try Tryit to get people to try Tryit, just try the following from terminal:
$ clj -Sdeps {:deps\ {com.phronemophobic/tryit\ {:mvn/version\ \"1.1\"}}} -X com.phronemophobic.tryit/exec
deps: {com.phronemophobic/tryit {:mvn/version "1.1"}}
f: com.phronemophobic.tryit/exec

clj -Sdeps {:deps\ {com.phronemophobic/tryit\ {:mvn/version\ \"1.1\"}}} -X com.phronemophobic.tryit/exec
https://github.com/phronmophobic/tryit
#2022-03-2810:21Jakub Holý (HolyJak)so it essentially builds the clj command you need to execute to try the target library, right?#2022-03-2805:52eskoslein-git-revisions v1.0.0 > Automatically control, modify and adjust Leiningen project version based on metadata. • Automatically adjust Leiningen project revision string with custom data-oriented DSL • Supports several versioning schemes: https://github.com/esuomi/lein-git-revisions/blob/v1.0.0/semver.org, https://calver.org/, https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md, Git hashes, other metadata and more! • Adjusting the revision is based on easily automatable metadata such as environment variables • 100% hands-free for developers • Output revision metadata to file for further consumption For examples how to use with CI the project is self-recursive, so its GitHub Actions uses itself to release new versions of the plugin. Badges at top of README for clojars links etc. https://github.com/esuomi/lein-git-revisions#2022-03-2813:48Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.0.1100 is now available (maybe I should have released this at 11:11) • Default to Clojure 1.11.0 if no Clojure version is specified • https://clojure.atlassian.net/browse/TDEPS-135 Fix concurrency issues in Maven artifact downloads#2022-03-2815:57oxalorg (Mitesh)For those on mac
brew upgrade clojure/tools/clojure
#2022-03-2816:51littleliFor those on Windows (using scoop installer)
scoop update clojure
#2022-03-2901:28ahungryArch Linux is already up to date with it - arch users: pacman -Sy clojure#2022-03-2908:06vemvnvd-clojure - security checker - https://github.com/rm-hull/nvd-clojure/blob/v2.4.0/CHANGELOG.md#changes-from-230-to-240 Now it uses the 7.x https://github.com/jeremylong/DependencyCheck/ series. Also new: performance and reporting improvements. Enjoy!#2022-03-2908:45jumarLooks very interesting, thanks! I've just tried it on a project that still uses JDK 8 and got this error:
lein with-profile -user run -m nvd.task.check "" "$(lein with-profile -user,-dev classpath)"
...
Exception in thread "main" Syntax error macroexpanding at (ring/adapter/jetty.clj:1:1).
        at clojure.lang.Compiler.load(Compiler.java:7665)
...
Caused by: java.lang.UnsupportedClassVersionError: org/eclipse/jetty/util/Attributes has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
#2022-03-2908:51vemvnote that nvd-clojure does not involve requiring ring.adapter.jetty , that would be at least part of your problem are you running nvd-clojure in its own isolated project as the readme says? other than that our CI matrix has JDK8/11/17 in it#2022-03-2909:01jumarAh no, I'm not running it like that - I though it's just an example while it seems it's a prerequisite. Let me try that#2022-03-2909:15jumarIt works great, thanks!#2022-03-2909:18vemvCheers 🍻 hope you can make great use of it!#2022-03-2912:10Ivar Refsdalhttps://github.com/ivarref/yoltq, an on-prem queue library for Datomic that supports retries, backoff, ordering and more, is released with version 0.2.55! This version includes a critical bugfix. The bug could lead to stalled jobs in some cases. There are other small changes documented in the https://github.com/ivarref/yoltq#change-log.#2022-03-3000:58phronmophobicDewey: Index of Clojure libraries available on github. Ever wanted to know what clojure libraries were available on github as git dependencies? Get the list as data or query it yourself with Dewey. data: https://github.com/phronmophobic/dewey/releases code: https://github.com/phronmophobic/dewey#2022-03-3008:22pezVery cool! VS Code struggles with that the whole thing is on one line though. Even zprint seems to struggle with it. It's not finished even though I pressed return several minutes ago. 😃#2022-03-3017:24phronmophobicInteresting. I hadn't thought about making the data format more editor friendly. I'm definitely open to using more convenient formats or including more/less data to make it easier for consumers. I know https://github.com/clojars/clojars-web/wiki/Data#useful-extracts-from-the-poms line delimited edn for their dataset of libraries. Maybe that's a more convenient format?#2022-03-3017:27phronmophobicall the .edn files can currently be read using something like:
(require '[ :as io]
         '[clojure.edn :as edn])
(defn read-edn [fname]
  (with-open [rdr (io/reader fname)
              rdr (java.io.PushbackReader. rdr)]
    (edn/read rdr)))
#2022-03-3008:02Dumchhttps://github.com/Liverm0r/robot - 0.2 released. A clj library to simplify java.awt.robot usage to manipulate desktop. Now there is an ability to get info about your keyboard.
(r/get-my-keyboard)
;; =>
{3 "⎋", 8 "⌫", 9 "⇥", 10 "⏎", 12 "⌧", 16 "⇧", 17 "⌃", 18 "⌥" ... }

(r/get-key-name 61440) ;; => "F13"
added docs about java interop; updated to clojure 1.11
#2022-03-3107:24Jakub Holý (HolyJak)Nice, I did not know about these java capabilities. I have noticed (r/clipboard-get-string) ;; => text to put in clipboard in readme, the comment is confusing? Also I see there Copyright © 2020 FIXME 🙂#2022-03-3110:14Dumchthank you, I will fix it#2022-03-3017:48tengstrandpoly https://github.com/polyfy/polylith/releases/tag/v0.2.14-alpha released #polylith. The highlights are: • Don’t commit files when creating a workspace (if not passing in :commit) - issue https://github.com/polyfy/polylith/issues/160 • Now we can run all tests for selected projects - issuehttps://github.com/polyfy/polylith/issues/189 • PDF https://github.com/polyfy/polylith/releases/download/v0.2.14-alpha/poly-0-2-14-alpha.pdf.#2022-03-3108:32mpenetNew https://github.com/exoscale/coax is out: 1.0.0-alpha19 (cljs bugfix with double/long coercion). Thanks to @anthony-galea#2022-03-3117:05ericdalloclojure-lsp Released new https://clojure-lsp.io/ 2022.03.31-14.21.14 with a new long waited feature: Java interop support 🎉 Now, finding java class definitions are possible even if the source code is not available, clojure-lsp will decompile it for you! This was a huge work done with the help of @borkdude from the #clj-kondo side, hope you all like it :) This release was supported by https://www.clojuriststogether.org/ clojurists-together gratitude For more information about this release, check #lsp#2022-03-3117:07russmatneyamazing!!!#2022-03-3119:15Cora (she/her)daaaang, so good!!#2022-03-3119:48Janne SauvalaSuper awesome! I'm interested in the solution how you made this possible#2022-03-3119:50ericdalloSure @UJZ6S8YR2 , the decompilation works using https://www.benf.org/other/cfr/, which output a .class file to a .java :)#2022-03-3119:51ericdallothre rest is more navigation and making good defaults#2022-03-3120:11Janne SauvalaNice 👍:skin-tone-2: this is one of the features I have been waiting. Congrats for the release!#2022-03-3120:13borkdudeAnd many more improvements to come, also powered by clj-kondo analysis clj-kondo 🚀 :)#2022-04-0106:51flowthingAwesome! Is navigating directly to static/instance method impls in the cards?#2022-04-0106:56borkdudeYes, in the coming months #2022-04-0107:08flowthingVery nice! That'll be a big step forward for doing Java interop in editors other than Cursive. :thumbsup:#2022-04-0108:38vemv> other than Cursive The cider-nrepl family of editors also has these features around the corner. They're there really, as they have for a pretty long time, but we just need to reliably deliver one of the last missing pieces#2022-04-0116:21mpenetDoesn't cider have this already? I remember at least that it has completion#2022-04-0116:22mpenetAt least on static members, enums etc#2022-04-0116:23mpenetNot sure about jump to def & co, I was not really using that before using lsp#2022-04-0116:27borkdude@U050SC7SV Not sure if CIDER also decompiles .class files ;-)#2022-04-0116:27borkdudeAs always, there will be overlap between these tools#2022-04-0116:29mpenetYeah I recall only seeing that for clojure java stuff actually#2022-04-0116:30vemvThe decompilation thing seemed a bit odd to me, wrapping https://github.com/clojure-goes-fast/clj-java-decompiler is pretty easy (and part of my workflow for tough bugs or random curiosity) but considering a decompilation a fallback for "jump-to" is a bit surprising > Doesn't cider have this already? I remember at least that it has completion Yeah completion is there, https://github.com/alexander-yakushev/compliment/ provides it#2022-04-0116:33chrisnI have a drop-in replacement for clojure.data.csv that is much faster - around 10x - for large (1GB+) csv files. I took the time to study how univocity gets its great performance and write a small csv parsing system that has equivalent performance but removes some of the complications such as a fixed column width from it. CSV parsing isn't meaningfully parallelizable because quoted sections can contain newlines and inside a quoted section a double quote escapes a quote so you can't start at a random address and start parsing because you don't know if you are inside a quote. You have to parse from the beginning and tricks like line-seq also are not going to work. line-seq is, however, amazingly fast as the readers readline function is very optimized across jdks. Any parallelized approach is a two-pass algo where the second pass can be parallelized which I don't think you can efficiently do in java although I have seen vectorized 2 pass approaches in c++. Turns out anywhere you use an actual java.io.pushbackreader you are sunk as far as performance is concerned. You have to read into character arrays and then implement a pushback-style abstraction on top of that if you want to have good performance parsing files. This is even moreso, interestingly enough, for jdk-17 where the int read(); has been heavily nerfed while the read(char[], int, int) function has received a health bordering on insane amount of buffs. By my tests in jdk-17 read() if a 1.7GB file for a pushback reader is 51sec vs 500ms for a tight loop reading into a character array. This may mean that there are avenues to parsing large amounts of json and edn that are significantly faster than the current approach used by various existing libraries. IT also means that fancy methods of reading character data from a file, such as memory mapping it and even potentially io_uring on linux are unlikely to get any faster for CSV parsing specifically unless you know your data doesn't have quoted sections. At the end of the day - don't use csv. Use arrow or parquet if you need any performance at all as a parquet file of a 1.7GB test csv set was ~240MB. But if you do use or have to parse a lot of csv data - https://cnuernber.github.io/dtype-next/tech.v3.datatype.char-input.html#var-read-csv.#2022-04-0116:38Alex Miller (Clojure team)are these changes that could be applied in data.csv instead?#2022-04-0116:41Noah BogartGonna have to check this out, see if there are any wins available for #data-json #2022-04-0116:44chrisnPlease read the namespace docs. I used java classes for tight loops.#2022-04-0116:49chrisn@U064X3EF3 - I suggest a quick look over the code. It is a complete rewrite that is much more intense than the original pathway. Original clojure.data.csv code is I think very beautiful and concise and thus probably a better teaching tool. What I would perhaps consider is moving away from PushbackReaders in clojure's java edn and lisp reader pathways.#2022-04-0117:20Alex Miller (Clojure team)I have done some experiments like that in the past, so cool to see an example#2022-04-0117:50Cora (she/her)whoooaaaaaa#2022-04-0119:45Ben SlessVery cool I've done something similar going the other way around, writing CSV, making it possible to pretty much stream it directly#2022-04-0120:00metasoarousFantastic work as always @UDRJMEFSN!#2022-04-0121:12chrisn@UK0810AQ2 - That is interesting -all of this is really for tech.ml.dataset at the end of the day and we don't serialize large datasets to csv. We do, however, come across csv datasets in the wild all the time.#2022-04-0204:26Ben Sless@UDRJMEFSN we often have to produce reports for clients at work and they can be interested in getting them as CSV sometimes#2022-04-0208:51slipsetDuring my work with speeding up data.json I guess I found some of the same stuff as you did @UDRJMEFSN. In essence there were two bottle necks, one was the parsing out strings, ie stuff inside quotes, and the other was creating the persistent data-structures. I ended up using a java.io.PushbackReader but rather than reading char by char, I ended up reading into a buffer of length 64 and working on that, as you can see here https://github.com/clojure/data.json/blob/master/src/main/clojure/clojure/data/json.clj#L94 I do believe I did some experiments with implementing a PushbackReader like thing in Java, but couldn’t really get any significant performance out of it.#2022-04-0212:05chrisn@U04V5VAUN - then I think there is so many other things going on it overwhelmed the time it took - if you are building persistent datastructures there are probably many things you can do quicker. Here are timings for int read() of pushback reader vs. my custom https://github.com/cnuernber/dtype-next/blob/master/java/tech/v3/datatype/CharReader.java -
(time (read-all-chars (io/reader fname)))
  ;; jdk-8  - 5728ms
  ;; jdk-17 - 28257ms
  (time (read-all-chars (PushbackReader. (io/reader fname))))
  ;; jdk-8  - 19964ms
  ;; jdk-17 - 51795ms
  (time (read-all-char-reader (char-input/reader->char-reader (io/reader fname)
                                                              {:async? false
                                                               :n-buffers 2
                                                               :bufsize (* 16 1024)})))
  ;; jdk-8  - 3728ms
  ;; jdk-17 - 3053ms
  (time (read-all-char-reader (char-input/reader->char-reader (io/reader fname)
                                                              {:async? true
                                                               :queue-depth 4
                                                               })))
  ;; jdk-8  - 2872ms
  ;; jdk-17 - 2832ms 
Even compared to read() using a reader, the custom implementation is a faster till jdk-17. If we look at the source code of PushbackReader then we can see why - https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/io/PushbackReader.java#L86 - its a synchronized method followed by noise as opposed to, in most cases, an index bump and returning from an aget. But the large win is when you have a tight loop and reading the next character is an aget like you did for the strings. Moving from conj! with a transient persistent vector to an arraylist gets a ton of speed right there and using a normal HashTable and such have similar speed improvements so it really depends on if you need persistent datastructures at the end of the day. Also for CSV parsing I parse into 1 arraylist and have 1 stringbuilder-type object for the entire file and I clear() both of them just copying the arraylist when returning the value so I have a 'workspace' that is fixed and thus uses the same amount of memory all the time. Moving the tight loops from Clojure into Java like I did also improved the time considerably but only once everything else was fixed. Finally I checked that everything would inline correctly with -XX+PrintInline and friends. Finally I have a read thread that does the IO and use an ArrayBlockingQueue to communicate read blocks so the cpu-bound thread doesn't block on IO nearly ever. Because my use case is tmd I don't care if the datastructures are persistent or not but I imagine that if I took a careful look at data.json I could make improvements in the same vein as I mentioned but it would end up being more Java than Clojure. We just don't see GB+ json files like we do see large CSV files so it hasn't come up. I am not sure using transients is ever faster than say using arraylists and then calling toArray and then calling the appropriate persistent constructor (lazilypersistentlist, one of the two maps). Perhaps it is but I don't know if it is. It is definitely slower in the vector-type case than just using arraylist add.
#2022-04-0212:46chrisnIt's also the case that json is just harder by far than csv. metosin's jsonista on top of the jackson architecture only gets like a 2x perf gain - if that - above data.json in terms of decoding time. univocity got 10X+ against data.csv - so there was clearly a lot to gain there. Interestingly to me jsonista gets a major encoding gain which I wouldn't expect.#2022-04-0212:46slipsetI guess one major difference is that json is recursive in its structure, whereas csv is not.#2022-04-0212:47slipsetWhich means sticking to one stringbuffer for the whole parsing operation won’t do (unless you do something really smart)#2022-04-0212:49slipsetAnd, we’re talking different sizes here, ["10b" "100b" "1k" "10k" "100k"] is the range of sizes I was working with (and which are “normal” I guess for json parsing)#2022-04-0212:53slipset
(defn- read-array* ([^PushbackReader stream options]
  ;; Handles all array values after the first.
   (let [result (java.util.ArrayList.)]
     (loop []
       (.add result  (-read stream true nil options))
       (codepoint-case (int (next-token stream))
         \] (clojure.lang.PersistentVector/create result)
         \, (recur)
         (throw (invalid-array-exception)))))))

(defn- read-array* [^PushbackReader stream options]
  ;; Handles all array values after the first.
  (loop [result (transient [])]
    (let [r (conj! result (-read stream true nil options))]
      (codepoint-case (int (next-token stream))
        \] (persistent! r)
        \, (recur r)
        (throw (invalid-array-exception))))))
These two versions are basically of same speed.
#2022-04-0212:56slipset(and one might argue that at least for my use case, the maps dominates lists in the json)#2022-04-0212:56chrisnThen if you can return arraylists instead of vectors that would be a speed gain but kind of irrelevant. Maps have a similar low level constructor from an array of key,val,key,val.#2022-04-0212:57slipsetYeah, but returning anything non-persistent would be contract breakage in the case of data.json.#2022-04-0212:58chrisnYes - which is why I work in dtype-next 🙂.#2022-04-0213:01chrisnI will take a look at json parsing at some point. If jackson is barely faster then it is using same system under the hood more or less and there may be something there. dtype-next also has https://github.com/cnuernber/dtype-next/blob/master/java/tech/v3/datatype/ListPersistentVector.java to create a persistent vector compatible object from any java list in place.#2022-04-0213:05chrisnjson is also harder because those sizes above 1b -> 100k. No one cares about 1k csv files at all - they only care when the file gets big. For servers parsing small json is something you always do all the time so it is very relevant.#2022-04-0213:06chrisn100k csv is like just barely getting started.#2022-04-0213:07chrisnI mean, why not just read everything into a single character array and push-back just writes data back into the array and resets the index.#2022-04-0213:10slipsetI believe I did something like that at some point (to see how much gains I could get from that), but everything sort of got dwarfed by https://github.com/clojure/data.json/blob/master/src/main/clojure/clojure/data/json.clj#L94 and specifically https://github.com/clojure/data.json/blob/master/src/main/clojure/clojure/data/json.clj#L108 , So basically creating the new string.#2022-04-0213:10slipset(but then again, it’s a bit over a year since I last worked on this, so I don’t remember everything.#2022-04-0213:11slipsetBut, I guess you should be seeing much of the same, since parsing csv is very much about creating strings.#2022-04-0213:12slipsetAnd i believe I implemented read-quoted-string in Java at some point without seeing huge increases in speed.#2022-04-0213:13chrisnI realized that to get a major gain I had to be tight looping over indexes of a character array and that array had to be local to the method (meaning spilling field variables to locals). Then it was lots of reorganizing code and profiling and such. I did see significant speed increases when I moved to java for the read-row loop myself but I haven't seen those increases in general when moving e.g. a summation loop into java. It depends I guess on the context a bit.#2022-04-0213:14chrisnthe high end of hotspot's ability to optimize pretty much only works on arrays, primitives, and simple base jvm datastructures.#2022-04-0213:20slipset
public final class json$read_quoted_string extends AFunction
{
    public static final Object const__1;
    public static final Var const__11;
    
    public static Object invokeStatic(final Object stream) {
        final Object buffer = Numbers.char_array(json$read_quoted_string.const__1);
        final int read = ((PushbackReader)stream).read((char[])buffer, RT.intCast(0L), RT.intCast(64L));
        final int end_index = read - 1;
        if (read < 0L) {
            throw new EOFException("JSON error (end-of-file inside string)");
        }
        long i = RT.intCast(0L);
        Object o = null;
    Label_0537:
        while (true) {
            final int G__18164;
            final int c = G__18164 = RT.intCast(((char[])buffer)[RT.intCast(i)]);
            switch (G__18164) {
                case 34: {
                    final int off = RT.intCast(i) + 1;
                    final int len = read - off;
                    ((PushbackReader)stream).unread((char[])buffer, off, len);
                    o = new String((char[])buffer, RT.intCast(0L), RT.intCast(i));
                    break Label_0537;
                }
                case 92: {
                    final long off2 = i;
                    final int len = read - RT.intCast(off2);
                    ((PushbackReader)stream).unread((char[])buffer, RT.intCast(off2), len);
                    o = ((IFn)json$read_quoted_string.const__11.getRawRoot()).invoke(stream, new String((char[])buffer, RT.intCast(0L), RT.intCast(i)));
                    break Label_0537;
                }
                default: {
                    if (i == end_index) {
                        ((PushbackReader)stream).unread(c);
                        o = ((IFn)json$read_quoted_string.const__11.getRawRoot()).invoke(stream, new String((char[])buffer, RT.intCast(0L), RT.intCast(i)));
                        break Label_0537;
                    }
                    i = RT.intCast(i) + 1;
                    continue;
                }
            }
        }
        return o;
    }
Is the decompiled read-quoted-string what’s a bit annoying are the intCasts that go on, but that might just be handled by the JIT?
#2022-04-0213:25chrisnok, so that was another reason I worked in java. To avoid casting every char to int and indexes to int. Here is the tight loop for csv parsing: https://github.com/cnuernber/dtype-next/blob/master/java/tech/v3/datatype/CharReader.java#L97.#2022-04-0213:27chrisnAlso note that hotspot's optimization pathways are built expecting the output of javac. To the extent they work with other compilers is luck.#2022-04-0213:29chrisnhaha, to the extent they work with javac's output is luck much less other compilers 🙂.#2022-04-0213:29chrisn...the magic of hotspot...#2022-04-0213:47Ben Sless@U04V5VAUN you can't use ints as primitive locals in loops, you're doing more casts that way, replace it with a regular long and set unchecked math to be true#2022-04-0213:47Ben SlessIf you was r to actually see what hotspot does with your code you can use tools like jitwatch#2022-04-0213:48Ben SlessIt's a bit of a hassle but very doable#2022-04-0214:00Ben Sless@UDRJMEFSN regarding the "canonicity" of javac, it's not as bad as you put it. It's a pretty simple compiler and you can know exactly which bytecode will be emitted from looking at java. I'd go as far as saying you can compile most java by hand (wouldn't want to). The JVM spec contains sections in targeting the JVM with your own compiler. Clojure also does a good job both in the implementation and compilation fronts on emitting JIT friendly code, especially after we got direct linking. I'd say the only detrimental parts in the implementation are around ints and you can often work around most of them, although a java implementation will always be faster there. Still, even in java if you want to squeeze the most performance out of an implementation, you have to write both JIT friendly and CPU friendly code#2022-04-0215:49chrisn@UK0810AQ2 - True, there are some statements that compile to similar bytecode and there are some loops that optimize will from clojure to hotspot but that pertains to the extent they match what javac would emit for various bits of code. That was really my point and my first statement - hotspot is built to target the output of javac is very true. Small variations that have no discernable difference in code output such as locals clearing can disable various optimizations that would have happened given very simply written java code. An example from the CSV parser is I got a major perf gain from simply spilling field variables to locals despite the fact that the entire parser is small enough to fit in registers in the current CPU architectures - hotspot couldn't detect of course that the field variable should be kept in a register for a given loop. I hadn't heard about jitwatch and you just made my day - compiling hsdis for a given platform is a pita. Totally agreed about jit and cpu friendly code - hence the design of the CharReader.java that I pointed to earlier. Hotspot is fairly weak - if you move beyond arrays and primitives then you are majorly dropping the chances that it will do anything meaningful as compared to an implementation in c++. In fact, when I was working through a math library a while back in java I found that simply adding an offset to an array access in a loop so I could use sub-arrays caused a major performance drain in a tight loop as compared to no array offset despite the fact that x86 assembly and it's various SIMD extensions have assembly instructions meant for indirect access of data. So at least I have to be really mindful and minimal if I want hotspot to do what I expect it to do given my background in other languages. Local variables, arrays, primitives, simple datastructures are simple looping constructs. Anything else is just usually off the table. And certainly no synchronization and absolutely not synchronization per character.#2022-04-0215:53chrisnHonestly the bigger thing to think about is moving away from pushback reader in https://github.com/clojure/clojure/search?q=pushbackreader - the tools every clojure person uses many many times every day.#2022-04-0216:15Ben SlessIf takes a bit of tinkering but I was able to get jitwatch to even display the clojure source alongside the bytecode and assembly. Feel free to ping me about it if you have questions. I also think it went better with an uberjar than a repl#2022-04-0217:39chrisnThat is amazing literally. What a great tool - I will get into it and ping you. Thanks a ton!#2022-04-0416:06rickmoynihan@UDRJMEFSN: > This is even moreso, interestingly enough, for jdk-17 where the int read(); has been heavily nerfed while the read(char[], int, int) function has received a health bordering on insane amount of buffs. Can you clarify what you mean by this? I get that you’re saying pushback reader read() is slower in jdk17? but what are you saying about read(char [], int, int)?#2022-04-0418:46chrisn@U06HHF230 - Sure - according to my tests, PushbackReader's read (and clojure.data.csv) are far slower on jdk17 while read(char[], int, int) for a Reader is far faster. Here are the timings I found:
(time (read-all-chars (io/reader fname)))
  ;; jdk-8  - 5728ms
  ;; jdk-17 - 28257ms
  (time (read-all-chars (PushbackReader. (io/reader fname))))
  ;; jdk-8  - 19964ms
  ;; jdk-17 - 51795ms

  ;;line-seq is pretty good but you can have newlines within quoted sections
  (time (count (line-seq (io/reader fname))))
  ;; jdk-17 - 2222ms

  (time (read-all-cbuf (io/reader fname)))
  ;; jdk-8  - 1480ms
  ;; jdk-17 - 426.24ms
#2022-04-0418:47chrisnReading the large CSV with clojure.data.csv also displayed this disparity:
(time (count (csv/read-csv (io/reader fname))))
  ;; jdk-8  - 56937ms
  ;; jdk-17 - 81223ms
#2022-04-0118:15Alex Miller (Clojure team)https://clojure.org/releases/devchangelog#v1.11.1-rc1 is now available • https://clojure.atlassian.net/browse/CLJ-2701 Pin serialVersionUID for Keyword and ArraySeq back to 1.10.3 values to retain binary serialization#2022-04-0120:08Noah BogartAny particular reason you didn't want to pin the other class IDs? #2022-04-0120:14Alex Miller (Clojure team)they didn't change so trying to do as small a change as possible in 1.11.1, we will do that in 1.12#2022-04-0120:17Noah BogartThat makes sense. Thanks
#2022-04-0205:30jumarExcellent - thanks a ton Alex for the quick turnaround. We'll give it a try.#2022-04-0217:33jumarI've just tried it and it works beautifully - thanks again!#2022-04-0310:53pezMulti cursor support is on its way to Calva Paredit, thanks to the wonderful work of @rayatrahman9! 🙏 gratitude . It is working in dev builds, and now we need your help testing this and finding remaining issues. Not sure how to do this, but trying this approach. I've introduced the feature and the process for testing and reporting on this issue: https://github.com/BetterThanTomorrow/calva/issues/1662 There you'll find 1. A video of the feature in action, including some glitches. 2. A link to the latest VSIX (the zip-file that contains the VS Code extension) 3. A description of the document notation we use for describing structural editing behaviour in Calva 4. Links and some instructions on how to proceed 5. Some first reports of some of the issues I have found Please, please consider doing this! ❤️#2022-04-0310:56pezHere's a video of the current build in action, warts and all!#2022-04-0312:46leifericfI’m blown away whenever I see your multi-cursor magic in your YouTube videos, @U0ETXRFEW 😅 Like in your FizzBuzz video, when you added a comment with the sample output data and aligned everything. I was thinking “Whaaat… How? And why am I goofing around with regex find-and-replace to do stuff like that?!” Multi-cursor and Paredit is some next-level stuff! 🤯#2022-04-0313:57pezI love multi-cursors. They have been lacking from Paredit for this long mostly because I've never figured out how to do it. But @rayatrahman9 just did it. When I look at how, I’m like “oh, of course!” Open source is wonderful. #2022-04-0321:46teodorluNeil 0.18 has just been released! Neil is a small babashka script to work with deps.edn. Running on plain babashka means neil starts quickly. New in version 0.18 is the ability to list which versions of a library are available on Clojars or Maven. This is useful if you don't want every RC/alpha version. Example:
$ neil dep versions org.clojure/clojure :limit 4
:lib org.clojure/clojure :version 1.11.1-rc1
:lib org.clojure/clojure :version 1.11.0
:lib org.clojure/clojure :version 1.11.0-rc1
:lib org.clojure/clojure :version 1.11.0-beta1
A single line from neil dep versions can be piped back into neil dep add[1]. With the help of a fuzzy-selector like fzf, we can list recent versions, interactively select one, and add the selected version to deps.edn:
$ neil dep versions org.clojure/clojure | fzf | xargs neil dep add
Small video attached. Please ignore the neilz command name - the video was made before Neil 0.18 was released. To install Neil, see Github: https://github.com/babashka/neil. [1]: neil dep add and neil add dep currently do exactly the same thing.
#2022-04-0410:54curtis.summersHugSQL 0.5.2 (and followup 0.5.3) released with the following changes: 0.5.3 • cljdoc-related fixes; otherwise, same as version 0.5.2 0.5.2 • new (markdown-based) docs! (https://hugsql.org) https://github.com/layerware/hugsql/pull/131 • fix fn defs to be at compile-time https://github.com/layerware/hugsql/issues/126 (thanks https://github.com/kelvinqian00https://github.com/kelvinqian00)!) • fix file var metadata to be a string https://github.com/layerware/hugsql/issues/137 (thanks https://github.com/gtrakhttps://github.com/gtrak)) • allow % in keywords https://github.com/layerware/hugsql/pull/136 (thanks https://github.com/Rovanionhttps://github.com/Rovanion)) • update next.jdbc groupId https://github.com/layerware/hugsql/issues/127 (thanks https://github.com/dmarjenburghhttps://github.com/dmarjenburgh)) • update clojure.java.jdbc to 0.7.12 https://github.com/layerware/hugsql/pull/135 (thanks https://github.com/jonassvalinhttps://github.com/jonassvalin)) • markdown doc strings (for http://cljdoc.org) • linter fixes https://hugsql.org#2022-04-0411:53borkdude@U065ZC1BP Awesome! Since a recent release of babashka, hugsql.core sqlvec fns can also be ran with that. There is a test in bb CI:
(ns hugsql.babashka-test
  (:require [babashka.fs :as fs]
            [clojure.test :as t :refer [deftest is]]
            [hugsql.core :as hugsql]))

(def sql-file (fs/file (fs/parent *file*) "characters.sql"))
(hugsql/def-db-fns sql-file)
(hugsql/def-sqlvec-fns sql-file)

(declare characters-by-ids-specify-cols-sqlvec)

(deftest sqlvec-test
  (is (= ["select name, specialty from characters\nwhere id in (?,?)" 1 2]
         (characters-by-ids-specify-cols-sqlvec {:ids [1 2], :cols ["name" "specialty"]}))))
#2022-04-0412:53curtis.summers@U04V15CAJ Very cool. I love what you're doing w/ babashka! Thanks!#2022-04-0414:42borkdude#babashka 0.8.0 released. Major new feature is the ability to declare pods in bb.edn. This effort was largely driven by @cap10morgan 👏 See here for an example: https://book.babashka.org/#_pods_in_bb_edn Full changelogs with many other improvements: https://github.com/babashka/babashka/blob/master/CHANGELOG.md#080-2022-04-04 Next Saturday, @rahul080327 will present about #babashka at NovaLug: https://www.meetup.com/novalug/events/fzklrsydcgbmb/ - feel welcome to join!#2022-04-0415:06richiardiandreaThe new pods addition is very nice, thanks @cap10morgan and @U04V15CAJ!#2022-04-0415:59jarrodctaylorAre you interested in learning how to use Datomic? Do you have a sense of humor and enjoy free retro interactive browser based tutorials? Then you really should checkout https://max-datom.com#2022-04-0417:07metasoarousThis is marvelous! Thanks for creating/sharing!#2022-04-0420:03KelvinReminds me of a project I helped make for a college course which was a monad tutorial with a similar retro aesthetic#2022-04-0422:46Tomas Brejlavery nice 👏 🙂 2 small things I'm missing: • It would be nice if ctrl+enter in the code editor submitted the code. (ie. so that I don't have to click RUN QUERYbutton all the time) • showing "matching paren" (for the paren then my cursor is currently placed after) would help a lot with finding unbalanced form. #2022-04-0500:04jarrodctaylorI pushed an update so matching braces are now highlighted.#2022-04-0510:02pezI find that I want to experiment a bit even after that snarky bot has concluded I might have learnt something. I think that a button that let's me evaluate ”outside” the script would do it for me. Not sure I am making sense... I'm thinking two Run buttons. One that asks for feedback from the bot/advances the story and one that just evaluates the code. Not sure how to not confuse the user with two Run buttons, but anyway. 😃#2022-04-0514:16Tomas Brejla@U0508JRJC found a bit strange behavior. Adding just a single space or newline results in "unmatched delimiter". (see enclosed picture) I think I haven't seen this yesterday although I'm very sure I used to indent the db into its own new line.#2022-04-0515:38Akiz@U02FU7RMG8M do you still have it?#2022-04-0515:41KelvinUnfortunately the repo is private and the Heroku app no longer seems to work. But here is a screenshot of the front page:#2022-04-0515:42KelvinAnd the lesson select page (complete with Gratuitous Japanese):#2022-04-0515:45KelvinFinally here's a sample lesson page, with the input being a Codemirror box:#2022-04-0816:17eggsyntaxOh my god, @U0508JRJC, that prologue is the funniest thing I’ve read in ages :rolling_on_the_floor_laughing:☠️#2022-04-0818:33jarrodctaylorI am glad to know it made someone chuckle 😄. You never know when you are writing something like that if it will land with the reader.#2022-04-0419:07Jacob O'BryantBig news 🙂 Biff is a web framework I initially released about two years ago and have been using in my own business since. I've spent the past couple months giving it a major overhaul based on my experiences with it. It's now ready to go! https://biffweb.com/p/new-release#2022-04-0419:40jmayaalvSold on htmx!! Really cool#2022-04-0421:21borkdudeCongrats!#2022-04-0422:31eccentric JVery cool! Been interested in combining alpine js (or a cljs equivalent) with scittle for frontend where react is overkill, this seems to validate that concept and looks like a solid stack to explore.#2022-04-0501:18Jacob O'Bryantthanks!#2022-04-0504:27tatutnice to see more people embracing server side rendering, congratulations on the release#2022-04-0516:26Luke ZeitlinTIL about htmx - looks like a really interesting choice#2022-04-0518:18Michaël Salihi@UE7LPTG1L For htmx, you may be interested to take a look at https://github.com/prestancedesign/babashka-htmx-todoapp Easy to run and play with. 😉#2022-04-0518:25Jacob O'Bryanthtmx (and hyperscript) are pretty great. This was a nice post about the general movement (it doesn't actually mention htmx, which is a shame, but it talks about other tools/frameworks in the same general category): https://github.com/readme/featured/server-side-languages-for-front-end#2022-04-0518:43pezCongrats! 🎉 #2022-04-0514:25Kelvinhttps://github.com/yetanalytics/flint v0.1.2 has been released: • Fix bug where certain SPARQL Update queries - LOAD, CLEAR, CREATE, and DELETE - were not being correctly formatted. • Fix validation of strings containing escaped char sequences such as \\n and \\r. (Special thanks to @quoll for their assistance on this bugfix.) This builds upon the (unannounced) v0.1.1 update, which was another bugfix update. For a full list of changes in v0.1.1 and v0.1.2, please see the https://github.com/yetanalytics/flint/blob/main/CHANGELOG.md.#2022-04-0515:12Alex Miller (Clojure team)https://clojure.org/news/2022/04/05/clojure-1-11-1 is now available with one change: • https://clojure.atlassian.net/browse/CLJ-2701 - roll back serialVersionUID for Keyword and ArraySeq to match 1.10.3 (retaining binary serialization version)#2022-04-0522:31seancorfieldWe have this in production for a couple of our apps. It's on staging too, for everything. Nothing weird seen so far.#2022-04-0518:05Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1105 is now available: • Defaults to Clojure 1.11.1 if no Clojure is specified#2022-04-0518:07seancorfieldThat should be 1.11.1.1105 in the text, yes? That's what is in the link.#2022-04-0518:09Alex Miller (Clojure team)yep#2022-04-0518:09Alex Miller (Clojure team)too many 1s#2022-04-0518:28imreYou know you must now fix some things in 6 commits I hope 🙂#2022-04-0518:29Alex Miller (Clojure team)could happen! :)#2022-04-0519:44genmeblogShould be released, just for a version number 🙂#2022-04-0521:18steffanWill the next release be (/ 10 9) ? :thinking_face:#2022-04-0521:23Alex Miller (Clojure team)I don't think 10/9 makes a very good version number 😉#2022-04-0521:33steffanIt also has far too many 1s for my liking 😏#2022-04-0521:38Alex Miller (Clojure team)It's only got 1!#2022-04-0603:26emccue> could happen! 🙂#2022-04-0606:18djblueJust released https://github.com/djblue/portal/releases/tag/0.23.0, a data exploration / navigation tool for clojure. Some recent highlights include: - Gruvbox color theme - :deps/prep-lib for git deps support - Table viewer now supports group-by style maps - Runtime icons for the log viewer Drop by #portal with any questions.#2022-04-0609:15kingmobAfter all these years, we’re announcing primitive-math version 1.0.0, the first under clj-commons. https://clojars.org/org.clj-commons/primitive-math/versions/1.0.0 Let’s get this out of the way first: there are no bug fixes or changes to the existing code, so if you don’t use Graal or clj-easy, this update won’t interest you. If you do use Graal/clj-easy, all code has been copied from a top-level single-segment ns to be also under a clj-commons ns. If you update your requires, you should no longer have any issues with single-segment namespaces. (There have been some slight updates to the docs, which are now available at cljdoc.) Many thanks to @p2b for bringing up the single-segment issue and especially @craigy for fixing it! Plus, thx to @slipset for setting up the CircleCI tag deployment.#2022-04-0619:25Asko NōmmIntroducing Clarktown: https://github.com/askonomm/clarktown A zero-dependency, pure-Clojure Markdown parser. Also entirely modular and extensible, so you can take out parts of it or add new parts to it with ease and really make it your own. I’m currently using it to render my own blog (http://bien.ee), and it works wonders. Do note however that it does not support the whole CommonMark spec, and I do not aim for it either, but rather would like to be more pragmatic and implement the parts that I myself use, or that people point out that they could really use.#2022-04-0619:27Noah Bogart> it does support is this supposed to be "it doesn't support"?#2022-04-0619:27Noah Bogartotherwise, great job!#2022-04-0619:31Asko NōmmYup you are totally right! It does not support, fixed now!#2022-04-0619:41russmatneynice work! i wonder how this compares to https://github.com/kiranshila/cybermonday#2022-04-0619:45Asko NōmmFrom quickly parsing cybermonday the big difference is that Clarktown only outputs HTML. That being said, since it is modular, it is quite easy to make it output whatever you want, but my goal was just HTML.#2022-04-0619:47russmatneydefinitely makes sense to be practical - i'll give it a read soon. no deps is pretty fun!#2022-04-0620:04Asko NōmmI’m a fan of tiny, self-contained software. My experience seems to keep telling me that the less there are dependencies, the longer the software lasts.#2022-04-0620:10borkdude@U026NQLSBLH Aw yeah:
$ bb -cp src -e "(require '[clarktown.core :as clarktown]) (clarktown/render \"**Hello, world**\")"
"<ol><li><strong>Hello, world</strong></li></ol>"
#2022-04-0620:12Asko NōmmI’m happy it works with Babashka out of the box! But you also just discovered a bug 😄 It renders bold text in an ordered list. I’ll get right on that.#2022-04-0620:12borkdude:-D#2022-04-0620:17borkdude@U026NQLSBLH I'm using markdown-clj in https://blog.michielborkent.nl/ (rendered by bb). Where do you think your lib differs?#2022-04-0620:27Asko NōmmBug is fixed in 1.0.3 version! As for the difference to markdown-clj, on the outset, it doesn’t differ. In fact actually it has less Markdown support built-in than markdown-clj, for example markdown-clj has footnote support which Clarktown doesn’t. But, Clarktown is modular and extensible (pick it apart and make it your own), so if you wanted to make some quick changes or add new features, that would be very straight forward to do. Like I said above as well, I do not intend to target full CommonMark spec as a goal of this library, and only add things that people would request from that spec or that I myself happen to find needing, so as to be more pragmatic in its development, and perhaps eventually reaching that spec completeness sort of organically.#2022-04-0710:23Vincent CantinCongratulation for the release#2022-04-0711:10Asko NōmmMuch appreciated @U8MJBRSR5!#2022-04-0619:32chrisnLighting https://cnuernber.github.io/dtype-next/tech.v3.datatype.char-input.html#var-read-json without the jackson dependency hairball. Same speed (or faster with options) as jsonista which by my tests put it about 5-10x faster than clojure.data.json. This is the same story as the fast CSV parser in the same library - don't use pushback reader and write tight loops in java. In any case, here is a https://github.com/cnuernber/fast-json. Overall if you are already using jsonista then there is no benefit unless you don't want immutable datastructures but for https://github.com/techascent/tech.ml.dataset, for example, it doesn't make a difference if the input is an array of java hashmaps or an array of clojure persistent maps. Interestingly the fastest option is a mix where for small maps I use a persistent array map and for larger maps I use a hashmap. Given that you get the full array of key-value objects up front I bet there is some fancy way to make a persistent hash map very fast (like computing all hashes in parallel type operations) - this I haven't researched. One more thing - the relative performance of clojure.data.json gets worse moving from jdk-8 to jdk-17 🙂. If you want to know why please read replies to the the earlier announcement about the CSV parsing system - PushbackReader's single character performance drops noticeably from JDK-8 to JDK-17. In any case, enjoy - https://cnuernber.github.io/dtype-next/tech.v3.datatype.char-input.html#var-read-json.#2022-04-0620:04Daniel JompheImpressive, Chris! > Overall if you are already using jsonista then there is no benefit unless you don't want immutable datastructures No dependencies on Jackson is a very serious advantage. What do you mean about immutable datastructures? > In any case, here is a https://github.com/cnuernber/fast-json. Have you also profiled impact on RAM? I suppose there's quite an improvement there too.#2022-04-0620:34chrisnI haven't checked the RAM usage - criterium does record such things so I could but I would guess everyone's RAM usage is nearly identical as we are all returning the entire object graph in memory at once. The performance really comes down to how fast you can create maps. So I profiled a few variations such as always use persistent maps, use a mix of persistent and java hashmaps, etc. Turns out the fastest thing aside from just returning the object[] in place in a marker object is to use https://github.com/cnuernber/dtype-next/blob/master/src/tech/v3/datatype/char_input.clj#L377.#2022-04-0620:42Daniel JompheAnd when you mentioned "unless you don't want immutable datastructures", is that just an internal implementation detail? If we read json with this lib and want immutable data, should we then add a step for that?#2022-04-0622:08chrisnIt's an option - the default is immutable. See to docs specifically about :profile.#2022-04-0705:43domparryThis is super interesting! Well done Chris. I agree that removing the dependancy on Jackson is a great advantage.#2022-04-0706:17ikitommiWell done, impressive numbers!#2022-04-0706:20ikitommithere is also a https://github.com/metosin/jsonista/blob/master/src/clj/jsonista/core.clj#L103-L108 btw, would be interesting to see that too. Bit surprised that clojure.data.json is so much slower here, based on the Jsonista tests, it’s much closer. I could add this (and Jsonista mutable) to Jsonista JMH perf suite.#2022-04-0710:09eskosHi, this might be a bit daunting request but since this is a custom implementation of JSON, could you run the conformance suite used to produce this: http://seriot.ch/json/parsing.html#2022-04-0712:15chrisn@U8SFC8HLP - Note that I used the https://github.com/cnuernber/dtype-next/blob/master/test/tech/v3/datatype/json/json_test_suite_test.clj as clojure.data.json. @U055NJ5CC - Yes for sure - it isn't clear exactly how to use this module instead of the clojure one. Will mess with it. If you have a snippet that does this exactly it would be helpful.#2022-04-0712:18chrisnI think the timing discrepencies are because I decided to parse the data from in-memory strings - reason being that I think any high perf use case can separate getting the data prepared and into memory from actually parsing the data. The dtype char-input system also includes a simple blocking io abstraction for larger files or network input streams but performance testing that involves gridsearching buffer sizes and such so it is much more involved.#2022-04-0712:18chrisnI wanted to see the performance of the parsers specifically, not the io subsystem.#2022-04-0713:27chrisn@U055NJ5CC - Updated with jsonista-mutable.#2022-04-0714:20chrisnAlso I should say this - if you want much better performance then using a https://github.com/techascent/tech.ml.dataset and serializing https://github.com/cnuernber/tmdjs/blob/master/src/tech/v3/libs/transit.clj#L124 is much faster than anything mentioned thus far. So in essence the above benchmarks are useful isofar that it is measuring generic json performance but if you want to transfer large amounts of data via JSON the general pathway is definitely not the best one.#2022-04-1113:13Jakub Holý (HolyJak)@UDRJMEFSN I guess there is a typo in https://cnuernber.github.io/dtype-next/tech.v3.datatype.char-input.html#var-read-json or I just do not understand the sentence; I guess "has" -> "and": > :mixed produces a mixture of persistent maps has hashmaps and is nearly as fast as :raw#2022-04-1212:33chrisnDefinitely a typo - thanks.#2022-04-0717:44jmvHello! Happy to share the first release of https://github.com/nytimes/jsonlogic, a JsonLogic implementation for Clojure.#2022-04-0718:50mjwTIL NY Times uses Clojure ❤️#2022-04-0802:03zaneWould love to hear more about how the Times is using Clojure!#2022-04-0814:49jmvour team is using clojure on the backend to power search platforms. basically our systems power search for product-focused teams at the company.#2022-04-0907:01kingmobDid David introduce Clojure when he was there?#2022-04-0802:54ambrosebsTyped Clojure 1.0.26 - Extensive improvements, including: - support reify, satisfies in Clojure - support defprotocol, implements? in ClojureScript - support annotating composite predicates like (defn sym-or-kw? [a] (or (symbol? a) (keyword? a))) https://www.patreon.com/posts/64869793#2022-04-0807:30Daniel SlutskyClay (version 1-alpha1) is a new little attempt to provide some of the visual tooling needs of the emerging data-science stack and community. https://scicloj.github.io/clay/#/notebooks/intro.clj It has been growing gradually as a series of small experiments in the #visual-tools group. In the last couple of years, a few of us have been using Notespace for documentation (literate programming), data exploration, study groups, workshops, etc. With the emergence of amazing tools such at Portal and Clerk, which are getting lots of attention from both users and maintainers, it seems to make sense to put Notespace on hold, and rely on those amazing tools (and others). Clay tries to maintain a bit of the Notespace approach, mostly regarding dynamic interaction and way of expression (using the Kindly library), but implement it as a thin convenience layer on top of other tools, allowing one to use the full power of those tools where appropriate. Lots of Clay's (& Kindly's) attention is around creating a compatibility layer, which allows one to use the same code and render it visually in different tools. This made it possibly, for example, to port the documentation of Viz.clj from Notespace to Clerk (wrapped by Clay) with no code change: https://scicloj.github.io/viz.clj/#/notebooks/intro.clj This is still considered experimental. Please share your feedback. Many thanks to @clark.thomaswilliam, who has been involved in testing and designing the usability aspects (and exploring some implementation details), to @djblue, @mkvlr, @jackrusher, @philippmarkovics for their patient and wise support with the brilliant tooling they are creating, to Rohit Thadani and @ezmiller77 for further testing and feedback, and to the #visual-tools group, which has been supporting and hosting this exploration so far.#2022-04-0807:34Daniel Slutsky(image credit: Wikimedia Commons)#2022-04-0812:35borkdudeclj-kondo v2022.04.08 - static analyzer and linter for Clojure code that sparks joy! https://github.com/clj-kondo/clj-kondo/issues/1331: new linter :non-arg-vec-return-type-hint that warns when a return type hint is not placed on the arg vector (CLJ only). See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#non-arg-vec-return-type-hint. • Enable :namespace-name-mismatch by default • https://github.com/clj-kondo/clj-kondo/pull/1611: support ^:replace override for nested config values • https://github.com/clj-kondo/clj-kondo/issues/1625: Add option --skip-lint, to skip linting while still executing other tasks like copying configuration with --copy-configs. • https://github.com/clj-kondo/clj-kondo/issues/1620: return type too narrow for re-find Analysis: • https://github.com/clj-kondo/clj-kondo/issues/1623: Implement analysis for Java classes: :java-class-definitions and :java-class-usages. See https://github.com/clj-kondo/clj-kondo/blob/master/analysis/README.md. • https://github.com/clj-kondo/clj-kondo/pull/1635: add :end-row and end-col to analyze data for :namespace-definitionshttps://github.com/clj-kondo/clj-kondo/issues/1651: Improvements for :protocol-implshttps://github.com/clj-kondo/clj-kondo/issues/1612: Improve analysis for deftypehttps://github.com/clj-kondo/clj-kondo/issues/1613: Improve analysis for reifyhttps://github.com/clj-kondo/clj-kondo/issues/1609: keyword analysis for ns + require channel: #clj-kondo#2022-04-0814:07jumarNice. Btw. in https://github.com/clj-kondo/clj-kondo/blob/master/analysis/README.md I don't see anything about Java classes.#2022-04-0814:07borkdude@U06BE1L6T Good point, these keys should be added here: https://github.com/clj-kondo/clj-kondo/blob/master/analysis/README.md#extra-analysis#2022-04-0814:10jumarIt's just because there was See next to it so I thought I would have a look 🙂.#2022-04-0814:11borkdudeClickbait.#2022-04-0910:30niquolaMacro-driven atomic CSS library for Clojure(Script) - https://github.com/HealthSamurai/macrocss#2022-04-0912:33Asko NōmmCan it be used in a way where a parent can target children as well? Let’s say: div:hover .sub-item ?#2022-04-0918:26niquolaIt can be extended to this!#2022-04-1001:16just.sultanovhttps://github.com/lazy-cat-io/tools.project - a project management tool. The current features: - Unify a project manifest - Collect dynamic metadata of builds at compile time (e.g. uberjar step) and use the metadata at runtime - Transform a project manifest to io.github.seancorfield/build-clj format - Manage project version#2022-04-1113:41Jakub Holý (HolyJak)Hi @U1EQNSHL4! Congratulation to the release! Personally, I would appreciate a brief section explaining the problem the library tries to solve so that I would understand better whether it is something for me and when/why I would want to use it 😅#2022-04-1008:38kingmobhttps://clojars.org/org.clj-commons/byte-streams is out, with better support for Graal and clj-easy and an updated Manifold dep. To avoid problems with Graal/clj-easy, all code has been copied out of the top-level single-segment namespace to a nested namespace, and the original top-level ns has been deprecated. Many thanks to @craigy for doing this and @p2b for bringing up the issue.#2022-04-1012:45ericdalloAnnouncing new lib https://github.com/clojure-lsp/lsp4clj, a lib that should help create any LSP for any language in Clojure 🎉 This was a result of a refactor on clojure-lsp side, separating the common server code to make that possible. Thanks @domagala.lukas for the great help of making that possible!#2022-04-1018:18pfeodrippeFuderoso!!!!#2022-04-1321:39dominicmJust to clarify, could I use this to start a TCP lsp server? Then use the nrepl/orchard stuff to handle things like completion?#2022-04-1321:42ericdalloprobably not, this follows Microsoft LSP spec which say the connection should be via stdin/stdout#2022-04-1321:45dominicmIs that distinct from the official LSP spec, which does allow for TCP? (or at least, did?)#2022-04-1321:47dominicm> Servers usually support different communication channels (e.g. stdio, pipes, …). To ease the usage of servers in different clients it is highly recommended that a server implementation supports the following command line arguments to pick the communication channel: > • stdio: uses stdio as the communication channel. > • pipe: use pipes (Windows) or socket files (Linux, Mac) as the communication channel. The pipe / socket file name is passed as the next arg or with --pipe=. > • socket: uses a socket as the communication channel. The port is passed as next arg or with --port=. > • node-ipc: use node IPC communication between the client and the server. This is only support if both client and server run under node. From https://microsoft.github.io/language-server-protocol/specifications/specification-current/#2022-04-1322:40ericdalloOh, you are right! I missed that, ATM lsp4clj only supports stdio, but we could add support for others. Although, I don't see TCP, would socket suppress that need?#2022-04-1400:42Lukas DomagalaI also assumed stdio was the only option. Node-ipc is probably out since we’re JVM only for now, but socket should be possible. Websocket seems to also be an option, but it needs a bunch of extra setup: https://github.com/microsoft/vscode/blob/main/src/vs/base/parts/ipc/node/ipc.net.ts#L184-L431 Looking at https://github.com/microsoft/language-server-protocol/issues/604 issue it seems that the LSP server actually has to connect to the client, which is a bit weird, but probably doable.#2022-04-1408:05dominicmTCP and socket are the same.#2022-04-1412:33ericdalloFeel free to open a issue there @U09LZR36F!#2022-04-1019:03Asko Nōmmhttps://github.com/askonomm/clarktown 1.1 - An extensible and modular zero-dependency, pure-Clojure Markdown parser. Improvements: • Support setext headings https://github.com/askonomm/clarktown/issues/6 • Make text emphasis better https://github.com/askonomm/clarktown/issues/5 • Add full test coverage https://github.com/askonomm/clarktown/issues/4 • Support triple-dash (`---`) horizontal lines https://github.com/askonomm/clarktown/issues/10 • Support dash (`-`) unordered lists https://github.com/askonomm/clarktown/issues/11 Bug fixes: • Underscores in link URL’s get rendered into <em>’s https://github.com/askonomm/clarktown/issues/9 • Links break textual checkboxes https://github.com/askonomm/clarktown/issues/8 #2022-04-1410:36Vincent CantinWe (admins) recommend that updates of libraries recently announced should be published in #releases instead.#2022-04-1518:10Asko NōmmOh sweet! Will join that 🙂#2022-04-1120:20Mark WardleAnnouncing https://github.com/wardle/hermes v0.10.533 - an open source SNOMED CT terminology library and microservice. - now with: • Faster import and indexing including better reification of refset items to concrete types • Comprehensive generative testing / synthetic SNOMED CT dataset generation using clojure.spec.alpha and clojure.test.generator • Updates to the graph API functionality (thanks to Wilker Lucio's Pathom) Also updated partner library/service https://github.com/wardle/hades 🔥that provides a HL7 FHIR facade using hermes. These are now live in several different deployed clinical applications - within the NHS here in the UK - and for a research project spanning multiple centres in the UK for multiple sclerosis. 😀#2022-04-1120:23niquolaSmall, but useful library for dry data matching in tests - https://github.com/HealthSamurai/matcho#2022-04-1122:12borkdude#nbb ad-hoc scripting for Clojure on Node.js v0.2.9 - v0.3.5 Highlights: • tools.cli is built-in • cognitect.transit is built-in • CLJS compatibility with :require-macros, etc. • architectural foundation for adding optional features not included by default: https://github.com/babashka/nbb/blob/main/doc/dev.md#features. Thanks @cldwalker for working on this feature. • New talk on Youtube about nbb: https://youtu.be/7DQ0ymojfLg Full https://github.com/babashka/nbb/blob/main/CHANGELOG.md#2022-04-1215:15practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user level aliases for Clojure CLI - library version updates and a few removals • Removed :deps from configuration to avoid over-riding version from install of Clojure CLI • Removed :inspect/rebl (alias is commented) after deprecating 6 months ago • GitHub action .github/workflows/lint-with-clj-kondo.yml updated to clj-kondo version 2022.04.08 • Update library versions using clojure -T:search/outated > command (see https://github.com/practicalli/clojure-deps-edn/blob/live/CHANGELOG.org for details)#2022-04-1218:52chrisnIntroducing https://github.com/cnuernber/charred - fast json/csv encode and decode. This library finalizes my research into csv and json parsing and is a complete drop-in replacement for clojure.data.csv and clojure.data.json. Same API, much better (5-10x) performance. This library gets as good performance for those tasks as anything on the JVM and avoids the jackson hairball entirely. You can find my previous post on fast csv parsing for the reasons why the system is fast or just read the source code. All the files are pretty short. I moved the code from dtype-next into a stand-alone library and added encoding (writing) to the mix so you don't need any other dependencies. Finally this library has the same conformance suite as the libraries it replaces so you can feel at least somewhat confident it will handle your data with respect. Enjoy :-)#2022-04-1218:56seancorfieldI'm curious why org.clojure/tools.logging {:mvn/version "1.2.4"} is a dependency of it?#2022-04-1218:58chrisnBecause it uses an offline thread to do blocking reads and sometimes that thread may log depending on the situation.#2022-04-1218:58chrisnhttps://github.com/cnuernber/charred/blob/master/src/charred/parallel.clj#L101#2022-04-1219:00chrisnI love tools.logging, btw. Far and away the best logging framework IMO. The whole zero dependencies thing is extremely helpful when it comes to logging systems.#2022-04-1219:04borkdudeI and some other people are looking to extend the tools.logging approach to more libraries like JSON and http clients here: https://github.com/clj-easy/tools.misc Feedback is welcome on that!#2022-04-1219:05KelvinDo you happen to have benchmarks, especially against Jackson-based libraries? (I know you've discussed your findings with the community, but would be nice to have results in one place.)#2022-04-1219:06chrisnhttps://github.com/cnuernber/fast-json#2022-04-1219:11KelvinI see. So was Charred extracted from the larger dtype-next library?#2022-04-1219:13chrisnYes - and I added writing the formats efficiently. I thought it would be more palatable to many people if the library was small and exact and had more minimal deps. dtype-next is specifically targetted towards HPC and thus it has somewhat more dependencies and many dependencies unrelated to reading or writing csv and json data.#2022-04-1219:15chrisnI guess additionally I feel like charred is a good library to learn techniques from as it is precisely targetted. dtype is a bit of a battleship.#2022-04-1219:35kennytilton on the name.#2022-04-1219:40domparryI am unreasonably excited about this.#2022-04-1219:41domparryIt's going to be great to get rid of Jackson dependencies for my etl pipelines. Thanks so much Chris.#2022-04-1219:47chrisn@U1S4MH05T - That is great!! The fastest pathway for parsing is to create a https://cnuernber.github.io/charred/charred.api.html#var-parse-json-fn with the options you want and call that. It turns out for parsing small json blobs simply mapping the options map to a parser is a significant portion of the parse time. That function is safe to use in a multithreaded context so you probably only need to ever create one.#2022-04-1219:51domparryThat's terrific! We're also parsing a LOT of json in our normal database and message queue usage of the Google cloud api, so this will give us a great lift in performance there too.#2022-04-1219:56richiardiandreaThis is an awesome library! FWIW, a way to be more flexible w.r.t. logging is to be able to pass a log function as option. I so like this approach that I could not stop sharing it 😄#2022-04-1219:57chrisnThat is a great point. Then I could say it has zero dependencies 🙂.#2022-04-1220:10flowthingThis looks fantastic — thanks for making it!#2022-04-1221:19kennytiltonLooks a little better than twice as fast as c.data.csv on a couple of 30-60k, 3-column, CSVs I am inhaling. 🏎️#2022-04-1221:47chrisnTry :async? false#2022-04-1221:49chrisnAnd a smaller buffer size#2022-04-1221:49chrisn:bufsize 8192#2022-04-1221:52chrisnThe test csv was 1.7Gb#2022-04-1221:52chrisnSo the system is tuned for larger files #2022-04-1221:53chrisnAlso - use the supplier interface that avoids creation of persistent vectors#2022-04-1222:18chrisnI guess at those sizes you can just load things into memory in an offfline thread pool and just parse the actual strings.#2022-04-1223:20kennytiltonThx! Don't mind me, I am just an applications guy. I thought 2X was great! 🙂 Now I have maybe 100x faster, For one, I started with:
(with-open [reader (io/reader "subtlex-lite.csv")]
                   (doall
                     (rest
                       (charred/read-csv reader))))
This is the 100x improvement:
(charred/read-csv (java.io.File. "subtlex-lite.csv")
                    :async? false
                    :bufsize 8192)
Not having luck finding a replacement for this in the doc:
(json/parse-stream ( "wordnet.json") true)
I stole this from the test suite:
(let [input (java.io.File. "wordnet.json")]
    (charred/read-json input :key-fn keyword))
Gives me:
Execution error at charred.JSONReader/readObject (JSONReader.java:375).
JSON parse error - unrecognized 'null' entry.
Anyway, 100x, not too shabbly! 👏
#2022-04-1223:23chrisn100X is amazing actually - That error means something started with 'n' and didn't finish with 'ull' - I really should print more context there. Is that json file accessible publicly?#2022-04-1223:32kennytiltonWordnet: https://wordnet.princeton.edu/download/current-version The so-called synset IDs are indeed strings like "n.123456". The 100x came on https://www.ugent.be/pp/experimentele-psychologie/en/research/documents/subtlexus I believe I grabbed the 75k Excel 2007 version then deleted all but a new words in OS X Numbers, then exported as CSV>#2022-04-1223:38kennytiltonActually, I recall I got my json version from here: https://github.com/fluhus/wordnet-to-json#2022-04-1223:39kennytiltonThat ^^ conveniently knits everything together in one JSON file.#2022-04-1223:40kennytiltonSpecifically wordnet.json.gz from here: https://github.com/fluhus/wordnet-to-json/releases#2022-04-1300:22chrisnPerhaps that is JSON5. The JSON spec I targeted requires all strings including map keys to be quoted. I will however check it out and get it to work - thanks for the heads up :-).#2022-04-1300:41kennytiltonMaybe I am mis-describing the data. Here is the start via less in a terminal:
{
  "synset": {
    "a1000283": {
      "offset": 1000283,
      "pos": "s",
      "word": [
        "admonitory",
        "admonishing",
        "reproachful",
        "reproving"
      ],
      "pointer": [
        {
          "symbol": "\u0026",
          "synset": "a999867",
          "source": -1,
          "target": -1
        },
:
#2022-04-1302:59Ben Sless🎉 https://github.com/cnuernber/charred/blob/master/java/charred/CSVWriter.java#L8#2022-04-1303:12Ben SlessNow the obvious question - EDN reader next?#2022-04-1304:31domparry@U39M2FMKM thread ☝️#2022-04-1306:00robert-stuttafordamazing#2022-04-1312:02chrisn@UK0810AQ2 I thought about edn but I don't know anyone who reads/writes edn at scale. I know plenty of people who process JSON at scale and large CSV files are all over the place.#2022-04-1312:06Ben Sless@UDRJMEFSN besides all of use reading and compiling clojure every day. Faster compiler and tools?#2022-04-1313:10chrisn@U0PUGPSFR - Wordnet found 2 issues related to reading data right at the edge of one buffer leading to the next. New version - 1.001 🙂. Great testcase - lots of escaped data and quite large.#2022-04-1313:12chrisn@UK0810AQ2 - OK now you are talking but that is a bit more involved than faster edn/lisp readers. That involves looking at the entire architecture of the Clojure compiler itself as reading the source code is like 1 step out of 5.#2022-04-1313:12chrisnI am sure Rich would love it if I forked Clojure and started making aggressive changes 🙂.#2022-04-1313:20chrisnIf I were going to speed things up I would speed up the time it takes to compile dtype-next and core.async. core.async, once required is a 3+ second hit I think due to the compilation of macros and such. dtype-next is a 1.5 second hit at least with the dataset library doubling it - faster require time of those would be beneficial to me and to new people comparing the system against pandas and dplyr. So I think that would involve looking at the macro execution pathway and seeing if I can find some gain there. I guess it would start with the edn and lisp readers however.#2022-04-1315:20Ben Sless@UDRJMEFSN did you by any chance profile this?#2022-04-1315:34chrisnI have only roughly profiled it. The document on https://cnuernber.github.io/dtype-next/datatype-to-dtype-next.html goes into what I found. Going from dtype v2 to v3 halved the require time and I figured this stuff out by starting a blank repl and then timing the require statement.#2022-04-1315:35chrisnI have not (yet) figured out a way to profile this stuff meaningfully aside from starting a jar with a main function that does a dynamic require and that is fairly tedious but doable as visualvm allows you to profile an executable startup up.#2022-04-1315:37Ben SlessDoesn't have to be a jar, you can even pass the flag to clj and eval the require expression#2022-04-1315:37chrisnOh rly? I hadn't considered that. That is very useful.#2022-04-1315:37Ben Slessclj -J-(visual VM flags) -e (require ...)#2022-04-1315:42chrisnI wonder then if visualvm is the best option. We are getting into where I would just want a data file produced and a tool to look at it. Do you have a suggestion for a tool for that type of profiling?#2022-04-1315:45Ben SlessJFR, attach to JVM at startup, capture recording to file, analyze and share freely#2022-04-1315:50Ben Sless
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr
#2022-04-1316:05chrisngot it- you are extremely helpful - thank you!#2022-04-1316:06Ben Sless
clojure -J-XX:+FlightRecorder -J-XX:StartFlightRecording=duration=20s,filename=myrecording.jfr -Sdeps '{:deps {org.clojure/core.async      {:mvn/version "1.3.618"}}}' -M -e "(require '[clojure.core.async])"
Glad I could help 🙂
#2022-04-1317:10kennytilton"I am sure Rich would love it if I forked Clojure and started making aggressive changes 🙂." Great, @UDRJMEFSN! I'll add the OOP module! GDR&amp;H#2022-04-1320:03chrisn@U0C8489U6 - Now zero deps for real 🙂. Thanks for the idea, log-fn is totally fine for this use case.#2022-04-1320:12richiardiandreaNiiiice#2022-04-1320:36domparryAlready integrated into our data pipelines. 🙂 And just upgraded to the zero dep version. 😄#2022-04-1321:10chrisnFortune favors the bold 🙂.#2022-04-1405:34Ben Sless@UDRJMEFSN any chance for readers for arbitrary data sources? Especially byte arrays and input streams? Currently all parsing is done in terms of chars and strings, any reason not to use bytes?#2022-04-1405:37Ben SlessWould you like me to open an issue for that?#2022-04-1412:30chrisn@UK0810AQ2 - If you pass in something that is not a string or an char[] the system attempts to make a reader out of it. This allows it to parse input streams and http://java.io.File's and such. Is that what you are looking for? So for instance for the large wordnet.json Kenny used earlier you just do (read-json (http://java.io.File. "wordnet.json) :async? true) and off you go. More abstractly you could create a CharReader from anything that can supply a sequence of character arrays.#2022-04-1412:31chrisnhttps://github.com/cnuernber/charred/blob/master/src/charred/api.clj#L165#2022-04-1412:32chrisnPut another way anything that http://clojure.java.io can turn into a reader is fair game.#2022-04-1412:51chrisnOne thing I think is an issue is a file that starts with the unicode BOM. All the systems I have seen have specific handling of that and I have none so I imagine those files will fail.#2022-04-1413:56Ben SlessSince you're using a buffer I guess the parser is still shuffling some data around. I thought that parsing bytes directly could help avoid casting and copying#2022-04-1414:58chrisnIf you knew you were only going to parse files of a particular encoding then perhaps but my guess is the actual decoding of the byte information into characters is a very minor part of the overall time. the :async? flag allows you to move that conversion to an offline thread and that helps with larger files. You could use a stream of bytes and an encoder and this is how https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/lang/String.java#L157 do it. What makes the parsers fast, however, is implementing things like parsing strings or numbers into https://github.com/cnuernber/charred/blob/master/java/charred/JSONReader.java#L134. My guess is that doing the decode from bytes to chars in those loops would not be an overall win as you would increase the code size in each loop. I could definitely be wrong on this, however.#2022-04-1415:00chrisnReading from bytes has the strong advantage of fitting twice as much data into the cache and in this realm that could actually be nearly a 2x gain.#2022-04-1415:04chrisnPotentially you could write the parser to work from byte data and just encode chars that are uninteresting to the parser as a special byte value in a lot of cases. I don't know, you would want to make sure there was a potential win there before committing real work to trying it out.#2022-04-1415:08chrisnString.java has some very interesting information in the comments, btw.#2022-06-0220:22domparry@U11BV7MTK ☝️#2022-04-1223:16ambrosebsTyped Clojure 1.0.27 - Check your programs without depending on typedclojure! https://www.patreon.com/posts/65065388 Also includes fixes to malli->type translation and other improvements.#2022-04-1323:25ambrosebsHere's a fleshed out tutorial on how to type check a Clojure library without introducing a runtime dependency on Typed Clojure https://github.com/typedclojure/typedclojure/tree/main/example-projects/zero-deps#2022-04-1407:15pezIt is my great pleasure to announce that the Calva team is reinforced with two amazing community members: @corasaurus-hex and @domagala.lukas! 🎉 calva Cora and Lukas are both pure pleasures to cowork with. Added to that, they bring expertise, focus on details, and a quality mindset. Calva is both more useful and more maintainable thanks to them. And, as members of the #calva channel already know, they also strengthen our user support lines. As someone who cares deeply for Calva and its users, Cora and Lukas joining makes me happy beyond my ability to express it in words. I'm also super happy that I let @lorilynjmiller have the scoop. I so enjoyed this conversation!#2022-04-1407:37leifericfYay! Calva is an incredibly important project for the Clojure community, especially when it comes to making Clojure available to a broader audience of newcomers. And you're doing a fantastic job with development, user support, and marketing. I'm glad to see more skilled people join the team. Congratulations to everyone!#2022-04-1408:18Ben Slessbsless/clj-fast v0.0.11 - opportunistically faster Clojure core functions https://github.com/bsless/clj-fast/releases/tag/v0.0.11 includes: • bug fix in assoc-in inliner which couldn't expand falsey values • benchmarks rewritten with JMH • definline which also accepts multiple arity signatures#2022-04-1408:25Ben SlessThe sanic reactions :rolling_on_the_floor_laughing:#2022-04-1409:14vlaaadgraphql-party Announcing first release of https://github.com/vlaaad/plusinia — a complementary library to https://github.com/walmartlabs/lacinia that solves N+1 problem when fetching data. In short, it replaces Lacinia resolvers (input value -> output result) with Plusinia fetchers (set of input values -> map of input value to output result).#2022-04-1413:42nottmeyHi @U47G49KHQ exactly what I was looking for, so thank you for sharing! In case one is using Lacinia with Datomic, the N+1 problem does not have that much impact, right? I man when resolving the database is mostly already in process. :thinking_face:#2022-04-1413:45vlaaadDepends on Datomic version I guess? This library was developed for a project that uses Datomic Cloud (i.e. every query is a network request)#2022-04-1413:56nottmeyOk, I see. I thought some parts of the database are (preloaded) held in process, even in datomic cloud, so not every query is a network request, but I don’t have a complete understanding of datomic yet. I guess I need to monitor my setup once it has significant load to see whether I need to optimize this already.#2022-04-1414:59orestisLove the name!#2022-04-1414:59Daniel JompheIf you use the Ion deployment model, your app deployed as Ions is loaded directly inside Datomic Cloud's clojure process, where it has locality to the process's datoms in RAM. Your app's code inside Ions uses the Client API but no networking is implied between your code and the local Datomic Cloud process. Many people seem to use Datomic Cloud without deploying their apps as Ions. When they do so, they use the client API through the network.#2022-04-1420:27niquolaAwesome, shouldn’t it be just a part of Lacinia?#2022-04-1607:17Chris McCormick🦊 I'm pleased to announce Sitefox v0.0.4 is out. \o/ Sitefox is a backend framework for ClojureScript on Node. This release has a big new feature: email & password based authentication. You can add email based auth, including reset password, email verification, etc. to your app with 3 lines of code:
(auth/setup-auth app)
  (auth/setup-email-based-auth app template "main")
  (auth/setup-reset-password app template "main")
The other big change is documentation. You can find the detailed codox docs here: https://chr15m.github.io/sitefox/ Finally, I also added some inline tests to the codebase for critical functions like the crypto used for auth. Here is the release tweet for those inclined: https://twitter.com/mccrmx/status/1515227749094354944
#2022-04-1610:07blueberryClojure Sound is a library for transforming digital media and communicating with MIDI devices. https://github.com/uncomplicate/clojure-sound I haven't written documentation for each function yet, but the whole https://docs.oracle.com/javase/tutorial/sound/TOC.html is covered as https://github.com/uncomplicate/clojure-sound/tree/master/test/clojure/uncomplicate/clojure_sound, which is even more useful because it shows how each function works in context of real use cases.#2022-04-1814:18athosPogonos 0.2.0 is out! https://github.com/athos/pogonos Pogonos is another Clojure(Script) implementation of Mustache templating language. The biggest change in 0.2.0 is the new API to call functions from the Clojure CLI with the -X/`-T` options, like clojure -X:template render (rendering) or clojure -X:template check (syntax checking for Mustache templates).#2022-04-1913:09baptiste-from-parisHello folks, it’s old (3 days!) news but @cgrand and I have released ClojureDart. It’s a Clojure compiler to Dart. The goal is to leverage Flutter and write native mobile applications on iOS/Android/macOs/linux/windows It’s alpha and does not have a REPL yet but we do support hot-reload ! Give it a try ! https://github.com/Tensegritics/ClojureDart#2022-04-1914:21Eugenhi, tried it out already. Works great. Biggest issues where setting up my environment for Android development. Congrats !#2022-04-1914:53baptiste-from-paristhanks ! what was hard with Android ?#2022-04-1915:00EugenI had to setup flutter and dart. Dart was simple, with flutter I had some issues. I ran flutter doctor and it was not detecting command line tools and such. I had to open Android Studio IDE (Bumblebee) to install them. I was expecting CLI setup all the way. Bumblebee seems o have changed some things so advice on stack overflow and other guides are not very accurate. After that it was not detecting emulator. Had to add it to $PATH. After that it was not detecting avds (emulator images). This took some trial and error until I got something working for my machine - Installed about 5 avd system images. I did try to follow official installation docs. ClojureDart App was visible in emulator. Reload only worked after pressing Enter key - thanks for putting that there. I did no know how to build my app as APK - this would be nice to add.#2022-04-1915:02baptiste-from-parisOk, this is mostly related to flutter though. I’ve had issues in the past with Android Studio#2022-04-1915:02baptiste-from-parisI don’t use it anymore and just go with genymotion or a real device, the experience is way better#2022-04-1915:03Eugenok, as a noob I don't know how to use those 😞 - I followed the official recommendations#2022-04-1915:05baptiste-from-parisoh, ok. Thanks for the review, it helps. Maybe you can make a PR on the documentation ? Might be good to leverage this recent experience.#2022-04-1915:06Eugenok, I'll give it a shot.#2022-04-1915:00andy.fingerhutAn updated version of the Clojure cheat sheet has been published, which includes the new functions from Clojure 1.11 that we expect would be most commonly used: https://clojure.org/api/cheatsheet#2022-04-1915:26Noah Bogarti forget about this, what a banger of a cheatsheet#2022-04-1917:07andy.fingerhutChange log here for anyone interested in details of changes made: https://github.com/jafingerhut/clojure-cheatsheets/blob/master/src/clj-jvm/CHANGELOG.txt#2022-04-1917:56dgb23I like the 404 page on clojuredocs: https://clojuredocs.org/clojure.core/iteration#2022-04-1917:58andy.fingerhutYep. Pretty cool failure until they update ClojureDocs to include the new things in 1.11, which has an issue for it already: https://github.com/zk/clojuredocs/issues/238#2022-04-1918:00dgb23Just to be sure: I assumed that (clojuredocs has the version on the top right) - I was referring to the picture shown on 404.#2022-04-1920:17lreadhttps://cljdoc.org/ now has new search features! Searching for libraries on the main page, among other tweaks, now: • ranks results by library popularity • matches by substring, so a search for corfield will now find Sean’s many works! And now, thanks to @corasaurus-hex, you can also search within the docs of the library you’ve selected! Quickly find: • namespaces, vars, etc • and articles! Give it a whirl and let us know what you think over at #cljdoc.#2022-04-1920:21borkdudeHow is "library popularity" defined?#2022-04-1920:29lreadCurrently by clojars download count over the last year or so.#2022-04-1920:31lreadWe don’t have stats strategy for artifacts hosted on maven central yet, so they are currently very popular by default. simple_smile#2022-04-1921:18djblueAwesome addition! 👏#2022-04-1921:19borkdudeCan I also request a library removal? borkdude/sci should not pop up and certainly not above org.babashka/sci, since that library moved organizations.#2022-04-1921:29lreadGood question. Not currently. The libraries are sourced from clojars. I’m guessing that borkdude/sci has had more downloads in the last year than org.babashka/sci. Maybe we need to give that https://github.com/clj-easy/lib-deprecations idea some more love/thought. If cljdoc knew a library was deprecated, it could reduce its rank - or omit it from results.#2022-04-1921:29lreadOr if we could reliably figure out a library was relocated, we could use that info.#2022-04-1921:32borkdudeI'm considering one more release where I just throw an exception on load and the README only contains: moved ;)#2022-04-1921:33lreadEffective!#2022-04-1921:35phronmophobicI'm not saying that using LATEST as a version is a good idea, but wouldn't that immediately break everyone that uses LATEST as their sci version? It's probably good to encourage people to update, but I'm not sure forcing everyone to update RIGHT NOW is the best.#2022-04-1921:36borkdudeIf they were using LATEST they could change it to the last version to fix the problem. Using LATEST is a bad idea anyway#2022-04-1921:37borkdudeAnother idea I had is to just print a message on load, which is a weaker form than throwing#2022-04-1921:38borkdudeOr they could change to org.babashka/sci LATEST ;P#2022-04-1922:08lreadNot that anybody is asking but… I think LASTEST is latest release including snapshots and RELEASE is latest non-snapshot release.#2022-04-1922:20Cora (she/her)oh that's good to know#2022-04-1922:24borkdudeyes, and both are not officially supported by tools.deps and will be phased out of mvn eventually too#2022-04-1922:25lreadyup#2022-04-2007:07leifericfAwesome! This is a game-changer for beginners looking for libraries. Another thing that would be amazing: Visualize all libraries in a graph, clustered by two different aspects: 1. How similar libraries are in terms of which problem they solve. ◦ Example: Libraries like Transit, Nippy, and Fressian would likely be spatially close. 2. How often libraries are used together in the same project. ◦ Example: Libraries like Ring, Compojure, Reitit, Re-agent, and Re-frame would likely be spatially close. Perhaps no. 1 could be solved by allowing library authors or community members to add a “category” and “similar to” links to libraries. A more sophisticated approach might be to cluster libraries by recognizing similar function signatures and names within the library sources. Maybe no. 2 could be done by mining dependencies from Clojure repos on GitHub. These additions would allow people to see which library alternatives are available and how they tend to be composed. And it would also help people find reference projects.#2022-04-2007:20leifericfIt would also be super cool if we could somehow link videos (i.e., from YouTube) and blog posts to library docs. That would make it easier for people to discover relevant conference talks, screencasts, tutorials, etc. I’m not sure if or how that could be automated, however. Perhaps links to Clojure content would need to be crawled, then manually curated and linked to libraries by the community through some web interface.#2022-04-2207:36Jakub Holý (HolyJak)Awesome work, @UE21H2HHD! Thank you so much!#2022-04-2212:29lreadHey, your foundation was a great help @U0522TWDA ❤️#2022-04-2011:47timrichardtI'd like to announce hicgql [io.github.timrichardt/hicgql "0.1.0"] , a tiny library I wrote to create GraphQL documents in ClojureScript. It's modeled after Hiccup and should cover the whole GraphQL spec. https://github.com/timrichardt/hicgql#2022-04-2014:43wilkerlucioHello, announcing a new update of Pathom 3, version 2022.04.20-alpha is out! Updates on this version: • Fix unnecessary resolver calls due to merging OR branches optimization • Add check on OR nodes to test for expectation done before start running • Upgrade guardrails to have its own Kondo configuration https://clojars.org/com.wsscode/pathom3#2022-04-2016:20mkvlrJust released released Clerk io.github.nextjournal/clerk {:mvn/version "0.7.418"} with: • 🧑‍🎨:skin-tone-3: Use viewer api to enable full customization of markdown nodes, see https://twitter.com/mkvlr/status/1509189879464398862 🐦🗂️ Table of Contents & 🌘 Dark Mode, see https://twitter.com/mkvlr/status/1509190548212666371 🐦 and https://snapshots.nextjournal.com/clerk/build/dfe82af312b2aea91d1dc7d1cbbbadc4660be49c/index.html#/notebooks/viewer_api.clj And more, see full https://github.com/nextjournal/clerk/blob/dfe82af312b2aea91d1dc7d1cbbbadc4660be49c/CHANGELOG.md#07418-2022-04-20. Get it https://clojars.org/io.github.nextjournal/clerk/versions/0.7.418. Follow up in #clerk.#2022-04-2105:52plexusNew Java releases are out which fix a critical security vulnerability. https://neilmadden.blog/2022/04/19/psychic-signatures-in-java/#2022-04-2105:54plexusI'm not really sure yet to what extent widely used Clojure libaries are impacted by this, but I do see that buddy uses some of the affected classes. If you're using buddy, especially with JWT, I would not wait to upgrade. In general if you're running an app exposed to the internet I would not wait to upgrade.#2022-04-2105:55plexusNote that this impacts Java 15 and later, if you're still on 8 or 11 (as many are) then you are not currently vulnerable.#2022-04-2106:08seancorfieldNot all of the JDK providers have updated binaries yet...#2022-04-2106:14Cora (she/her)temurin is in progress https://github.com/adoptium/adoptium/issues/139#2022-04-2106:15Cora (she/her)you can track it per platform here https://github.com/adoptium/adoptium/issues/140#2022-04-2107:55jumarI played with it a bit here: https://github.com/jumarko/clojure-experiments/blob/master/src/clojure_experiments/security/signing.clj#L1 I wasn't able to reproduce the problem when using buddy-sign but that's probably just because of the lack of skill. As others said, I wouldn't wait with the upgrade.#2022-04-2206:31javahippieThe Temurin Build and Release Process is really taking its time 😕#2022-04-2207:32Cora (she/her)@U06BE1L6T buddy uses bouncy castle which isn't vulnerable to this #2022-04-2207:50jumar👍#2022-04-2208:08plexusThat's for buddy-hashers, how about buddy-sign?#2022-04-2208:09plexus
:ecdsa+sha256         #(Signature/getInstance "SHA256withECDSA" "BC")
   :ecdsa+sha256         #(Signature/getInstance "SHA256withECDSA" "BC")
   :ecdsa+sha384         #(Signature/getInstance "SHA384withECDSA" "BC")
   :ecdsa+sha512         #(Signature/getInstance "SHA512withECDSA" "BC")
   :ecdsa+sha384         #(Signature/getInstance "SHA384withECDSA" "BC")
   :ecdsa+sha512         #(Signature/getInstance "SHA512withECDSA" "BC")
#2022-04-2208:11jumarThanks plexus, a good reminder to not to accept quick answers without checking 🙂 It may still be that buddy isn't vulnerable at all but I wouldn't trust myself to claim that.#2022-04-2208:16plexusyeah same here, I have not dug deep enough to confirm that it's vulnerable or not, but at a cursory glance it could be#2022-04-2209:41arohnerhttps://github.com/griffinbank/rules_clojure, a library for building and testing using Bazel#2022-04-2503:29bedersCurious to know how much faster builds got when adopting bazel. #2022-04-2511:34arohnercompilation is about the same, despite bazel compiling in parallel. The killer feature though is test caching. It’s possible for a 2 hour test suite to run in 5 minutes because you can run tests in parallel locally, and it only runs “dirty” tests, i.e. only run tests for source files that have changed since the last test#2022-05-0113:14sleepyfoxHow do you know which test files are affected by which source files?#2022-05-0212:27arohnerBazel requires you to specify the inputs and outputs of every build action. A test is just a binary that returns 0 or 1, and depends on all source files required to run the test#2022-05-0214:08sleepyfoxOh, so like a make action then?#2022-05-0214:57arohnerSimilar. Bazel uses a sandbox to force your inputs and outputs to be correct. It also has a network attached cache#2022-04-2219:24djblueJust released Portal https://github.com/djblue/portal/releases/tag/0.24.0, a data exploration / navigation tool for clojure. Some recent highlights include: - A viewer for clojure.test output - Improvements to the exception viewer - A terminal viewer for stdout/stderr style output Drop by #portal with any questions.#2022-04-2511:34arohnercompilation is about the same, despite bazel compiling in parallel. The killer feature though is test caching. It’s possible for a 2 hour test suite to run in 5 minutes because you can run tests in parallel locally, and it only runs “dirty” tests, i.e. only run tests for source files that have changed since the last test#2022-04-2415:30Daniel SlutskyClay is an alpha-stage data visualization and literate programming tooling layer, offering a unified & dynamic workflow around #portal, #clerk, and a #scittle-based renderer. https://github.com/scicloj/clay The current version 1-alpha10 of Clay offers some progress with Scittle-based visual documents. Examples: https://scicloj.github.io/clay/ https://scicloj.github.io/viz.clj/ It is one of the fruits of our progress at the #visual-tools group, and is also based on very thoughtful discussion and testing by @clark.thomaswilliam, @tsulej, @ezmiller77, and others. (edit: hashtags)#2022-04-2415:31Daniel SlutskyScittle is such a wonderful way to write web pages. https://github.com/babashka/scittle#2022-04-2418:56borkdudeThanks! There is also a #scittle channel, feel free to join#2022-04-2513:07magnarsJust pushed a new release of Confair - a configuration library for Clojure. https://github.com/magnars/confair • Config as EDN, in dev and prod. • Encrypted secrets in the git repo. • Masked secrets when logging. • Check in working local config, with easy overrides. It now supports encryption/decryption of nested config values.#2022-04-2514:30Alex Miller (Clojure team)Clojure CLI release https://clojure.org/releases/tools#v1.11.1.1113 is available • https://clojure.atlassian.net/browse/TDEPS-153 - yet more fixes for errors during concurrent Maven downloads#2022-04-2516:28robert-stuttafordjust me or does anyone else wish it was 1111 at the end?#2022-04-2517:17lreadOnes you start, you can’t stop?#2022-04-2714:45pezI am absolutely thrilled to be announcing the 0.0.1 super-WIP version of #joyride together with @borkdude! We are making VS Code hackable in a way almost reaching Emacs levels. Using Clojure instead of Elisp. How do you hack? Easy peasy. Install the Joyride extension in VS Code. Start Joyride's nREPL server. Connect your REPL. Hack away. Or should I say: Take VS Code on a Joyride. https://marketplace.visualstudio.com/items?itemName=betterthantomorrow.joyride#2022-04-2714:46slipsetCould it be that the link to the docs is off? https://github.com/BetterThanTomorrow/joyride/blob/HEAD/doc/configuration.md gives me a 404?#2022-04-2714:47borkdude@U04V5VAUN PR welcome. This is your chance to becomes one of the initial contributors!#2022-04-2714:47pezHow did that preview appear?#2022-04-2714:48borkdudehaha lol#2022-04-2714:48borkdudethe word HEAD should be replaced with master#2022-04-2714:48slipset#2022-04-2714:49pezPlease use the hashtag #vsjoyride on Twitter when telling the world about this, Clojurians. You are going to tell the world, right? gratitude#2022-04-2714:50borkdude@U0ETXRFEW Are you going to announce it on Twitter? Can't wait to RT you ;)#2022-04-2714:54russmatneyamazing!!!#2022-04-2714:59pez@borkdude you retweeted almost before I had submitted! 😃#2022-04-2714:59borkdudeI'm that eager#2022-04-2715:04borkdude@U04V5VAUN The link should be fixed on the next version in the marketplace#2022-04-2715:09leifericfHold up, did you guys just make an extension to make extensions in Clojure 😅 Awesome stuff.#2022-04-2715:09borkdude😎#2022-04-2715:12ericdalloAwesome! Let's do another one for Emacs and vim 😂 Clojure to extend them all#2022-04-2715:12borkdudevim should be doable (for neovim via rpc)#2022-04-2715:15pezTo make you don't need extensions @U01PE7630AC 😃#2022-04-2715:26Eugenman .. just when I decided to give Emacs a try 🙂#2022-04-2715:39pezI've heard that ELisp is not as joyful as Clojure is. 😃#2022-04-2715:41Eugentrue, but they have org-mode - which is my main driver for it (I'm not dropping Calva 🙂 )#2022-04-2715:42borkdude@U011NGC5FFY There's no reason to choose just one religion ;)
#2022-04-2715:43ericdallolet' s create a vscode org-mode in Clojure :)#2022-04-2715:50Eugenthat would be something#2022-04-2716:19wilkerlucioseems a lot of fun guys! blending all the editors, haha#2022-04-2717:24rayat@U4YGF4NGM checkitout#2022-04-2721:35kennytiltonPfft. Let me know when you get to 0.0.2. :rolling_on_the_floor_laughing:#2022-04-2721:37Brandon StubbsProbably just need to give it an hour 😄#2022-04-2807:50borkdude0.0.2 released :P#2022-04-2807:54pezBe a joyrider! https://open.spotify.com/track/1ILbD4eWKWvg8ub5qJyBTP?si=0b09785e8f3a4120#2022-04-2808:16kennytiltonDoh! @borkdude So now I have to schedule three days off from mxFlutter to evaluate Calva? https://www.youtube.com/watch?v=YnvgWYm8B84#2022-04-2813:35AkizI can’t wait for someone to ask the classic question “Do you use VSCode? Why don’t you use Intellij or Emacs!?” “Because it’s a joyride.”#2022-04-2904:42didibusThis is cool, but you can never approach Emacs level 😛 sorry to tell you, the VSCode API is just too restrictive.#2022-04-2904:47pezTrue dat!#2022-04-2904:49didibusThat said, you guys definitely make it harder and harder for me to resist giving VSCode another chance, Calva, Clojure-LSP, now this, it's looking great. Clojure tooling has never been so great, thanks to you all!#2022-04-2905:10pezI recorded a small demo which hopefully can relay some of how fun it is to hack VS Code this way. https://www.youtube.com/watch?v=V1oTf-1EchU#2022-04-2909:50robert-stuttafordyou guys are having so much fun, it's great to see 🙂#2022-04-2909:58borkdude#2022-04-2910:05AkizAfter a few people quit Cider, maybe the turnover will increase here https://joyridebrewing.com/ 😄#2022-04-2918:09cldwalkerHappy to announce nbb-logseq, https://github.com/logseq/nbb-logseq, a version of nbb that ships with datascript. It should now be really easy to write datascript CLIs. This is made possible by nbb's latest support for features which allow custom builds of nbb with any of your favorite CLJS libraries - https://github.com/babashka/nbb/blob/main/doc/dev.md#features. Thanks to @borkdude and logseq for making this possible!#2022-04-3018:17ProctorWe got sign-off at work and have open-sourced an early alpha project around interceptors (we are using it in production), and don’t want to fully announce it due to striving for the level of stability that the Clojure community; is anyone interested in looking at and helping give feedback on an alpha version of an interceptor library?#2022-04-3020:47ikitommiMaybe just make it public & mark as early alpha? There is btw #interceptors created years back to check if we could have common spec (like ring is) for interceptors to make them portable between libs.#2022-05-0205:55robert-stuttaford for a generic interceptor lib#2022-05-0219:30ProctorJust announced it! Thanks for the feedback on early alphas are good. 😄#2022-05-0219:46robert-stuttaford\o/#2022-05-0100:43ivanaI extracted data inspector from my other more complex projects and created a simple easy-to-use standalone gui data inspection module https://github.com/Ivana-/bb-inspect#2022-05-0418:32Jakub Holý (HolyJak)Nice! Excuse my ignorance but how does it compare to Portal and reveal?#2022-05-0420:23ivanaSorry, I didn't use Portal and can't compare. As for Reveal, I touched it long time ago and also may not be accurate for current state of it. Maybe it some users of both can compare and share their impressions? Btw Reveal is a whole cycle visual repl, and my module is only inspector, and may be called from any repl, including Reveal itself 😉#2022-05-0102:10ambrosebsTyped Clojure 1.0.28: New fn type syntax, check unrolled fns
[t/Int :+ :-> Foo] ;; for 1 or more t/Int arguments
[t/Int :? :-> Foo] ;; for 0 or 1 t/Int arguments
(fn ([a] ...) ([a & bs] ...)) ;; check with [t/Int :* :-> Foo]
https://www.patreon.com/posts/65833609
#2022-05-0518:21jean-lopesHey, can you provide an example using malli?#2022-05-0518:42ambrosebsHow's this? https://github.com/typedclojure/typedclojure/tree/main/example-projects/malli-type-providers#2022-05-0519:00jean-lopeshmm, I'm looking for an example with anonymous functions (using malli)#2022-05-0519:17ambrosebsoh! that hasn't been implemented yet. you'd need to embed malli schemas inside types. let me think it over.#2022-05-0519:20ambrosebsActually could you explain more what you mean so I'm sure?#2022-05-0520:05jean-lopesSomething like this:
(defn test
  {:malli/schema [:=> [:cat :int] :int]}
  [hello]
  (let [my-fn  (fn
                 {:malli/schema [:=> [:cat [:string]] :int]}
                 [hi]
                 (inc hi))]
    (my-fn hello)))
#2022-05-0521:45ambrosebsyes, exactly. thanks! is there a malli macro that provides this kind of syntax? perhaps we can analyze that instead.#2022-05-0521:45ambrosebseg., I know schema has schema.core/fn#2022-05-0600:29ambrosebsCouldn't find one.#2022-05-0123:10grzmHey, y'all! @borkdude finally prodded me enough to get my babashka-compatible port of Cognitect's aws-api into good enough shape that I'm not too terribly embarrassed to release it: https://github.com/grzm/awyeah-api babashka Kick the tires, and let me know how it goes! Aw, yeah!#2022-05-0209:08kuzmin_mhttps://github.com/darkleaf/di#2022-05-0211:33borkdudebabashka fs 0.1.5, a file system utility library (not only for babashka but also for Clojure JVM) is out with this time, mainly Windows improvements! https://github.com/babashka/fs/releases/tag/v0.1.5#2022-05-0212:46oxalorg (Mitesh)Introducing reitit-jaatya - a static site generator which will take any existing dynamic site which uses Ring and Reitit and 🥶 FREEZE 🥶 it into a bunch of static pages! This way it's easy to convert back and forth between static/dynamic versions depending on your use case. You aren't locked into any one approach and you get FULL REPL'able development experience! (More benefits of this approach in the README) https://github.com/lambdaisland/reitit-jaatya TL;DR of how it works: it walks through the reitit routes and fakes HTTP requests to the ring handler. It can also understand parameter/slug based dynamic routes by providing a simple function which returns a sequence of route params (example in readme) We're already using this on a bunch of production websites. http://gaiwan.co and http://reclojure.org are also powered by reitit-jaatya :dancer:#2022-05-0212:48oxalorg (Mitesh)We've also continued the tradition of the fine folks at Metosin and named the library with a Finnish word 🙂 > reitit means routes and jäätyä means freeze #2022-05-0213:32ikitommiAwesome, both lib & name! awesome#2022-05-0219:25ProctorAnnouncing Papillon https://github.com/lambda-toolshed/papillon, an interceptor library for Clojure(Script). We are using it at work in production, but publishing it as a Preview version for community feedback in the goal of stability that the Clojure ecosystem is known for.#2022-05-0219:26Proctorhttps://www.proctor-it.com/papillon-a-new-interceptor-library-for-clojurescript/#2022-10-2101:16onetomthis was the 1st time i heard about the clojure.core.async.impl.protocols/ReadPort. are there any articles, which provide some more explanation about it? the definition of it is not very verbose. i think it wasn't mentioned in rich hickeys talk about the internals of core.async either.#2022-10-2113:56ProctorI don’t recall. Not sure if it was a talk, post, or just digging into the source of core.async to understand how it works.#2022-05-0220:59bozhidarCIDER 1.4 ("Kyiv") is out! See https://github.com/clojure-emacs/cider/releases/tag/v1.4.0 for details.#2022-05-0221:15richiardiandreaHandy new commands! Thank you!#2022-05-0221:39pezCIDER inspires me!#2022-05-0304:59slimslenderslacksv0.1.14 of https://github.com/atomisthq/jibbit for packaging deps.edn projects into docker/oci container images - https://github.com/atomisthq/jibbit/blob/main/CHANGELOG.md#0114 • help from @olymk2 on an example that demonstrates a https://github.com/atomisthq/jibbit/wiki/polylith-example#2022-05-0314:56Daniel JompheNice to see you continue developing jibbit. We almost started using it the other day but finally we didn't need to go the docker route for this specific project... Do you people still offer a product for our CI to e.g. run static checks on our clojure repos? Your new product (vulnerability scanning) seems to have eclipsed your (potentially) previous product.#2022-05-0317:58slimslenderslacksHey @U0514DPR7 - thanks, ya, the underlying product still supports adding custom github checks to github repos. We just really needed to start pulling in vulnerability data so we that we could start offering workload protection and remediation automation (for example: only pull images built from a commit that has passed these checks AND does not introduce new vulnerabilities). So it might have looked like we shifted away from the CI checks; although I would say it was more that we were being pulled towards other checks on artifacts further to the right (but still correlated back to the commit of course). Same principle though. Building artifacts and verifying artifacts should be separate concerns.#2022-05-0318:04Daniel JompheOk so if I create an account and add a repo for vulnerability checking, I should still see the old catalog of e.g. Atomist Actions (or whatever was their name) that were marketed as competitive and more productive than GitHub Actions?#2022-05-0320:09slimslenderslacksYa, that's right Daniel. Feel free to DM me as well - I can give you more details.#2022-05-0311:50simongrayI wrote a small, self-contained, and reasonably efficient—i.e. it uses transducers—library for doing TF-IDF calculations and a bit of stuff on top of that: https://github.com/kuhumcst/tf-idf If you’re interested in NLP, data science, or if you perhaps need to index documents for search this might be interesting to you?#2022-05-0317:38orestisNice! Any performance rough estimates? Eg memory consumption / retrieval time etc? We have an Elasticsearch transition coming up but I'm keen to see if we can use our own algorithms for some things, to gain some flexibility. #2022-05-0319:10simongraySorry, no real stats, but it's probably not possible to get much leaner memorywise while using Clojure's own data structures and its core functions. I guess the mathematics could possible be optimised using primitive operators, but I'm not interested in that kind of performance tuning for now.#2022-05-0311:58borkdudeSCI v0.3.5 - Clojure/Script interpreter • https://github.com/babashka/sci/issues/711: support *print-dup*https://github.com/babashka/sci/issues/712: destructuring in protocol impl not working • https://github.com/babashka/sci/issues/715: allow property access on vars in CLJS • Add ->Eduction • Expose print-err-fn in SCI core API • add :name metadata via helper functions and use metadata for var names • Improve error reporting for let* and tryhttps://github.com/babashka/sci/issues/714: Improve instance member call parity with Clojure/JVM • Default *read-eval* / sci/read-eval to false • Expose all-ns and find-ns in sci/core • Fix for copy-ns when var has no metadata • Add add-class and add-import API functions in sci/coresci.async: EXPERIMENTAL namespace for async evaluation in CLJS https://github.com/babashka/sci / #sci#2022-05-0314:18ericdalloclojure-lsp Released clojure-lsp https://github.com/clojure-lsp/clojure-lsp • Decreased uncached startup time by 60-70%! • Improved completion performance • Support sorting classes inside package imports during clean-ns • Improve progress report both on editor and CLI using new clj-kondo callback feature • Rename namespace and all references when renaming a clojure file For more information, check #lsp This release was supported by https://www.clojuriststogether.org/ clojurists-together gratitude#2022-05-0314:26Noah Bogart60-70% is wild! nicely done to everyone involved#2022-05-0314:26Cora (she/her)omg the last bullet!!!#2022-05-0314:27Noah Bogartwow yeah, i missed that last bullet, that's a game changer#2022-05-0314:27Cora (she/her)right?#2022-05-0314:28Cora (she/her)i need to find how to use it#2022-05-0314:30ericdalloIt should work out of the box on all editors that support workspace/willRenameFiles @U02N27RK69K, this was introduced on Emacs's lsp-mode some weeks ago, Calva should already have that#2022-05-0314:33wilkerlucio@UKFSJSM38 I'm curious what the numbers 12.35.40 in the version means, is this the time of release?#2022-05-0314:40Cora (she/her)ooooooh!!#2022-05-0314:40Cora (she/her)that's so rad!!#2022-05-0314:40Cora (she/her)thanks @UKFSJSM38!#2022-05-0316:10codeasoneVery nice 👏 my clj-refactor usage will be biting the dust soon, with those refactoring and clean-up improvements.#2022-05-0410:24borkdudeEdamame v1.0.0 Edamame is a soy bean product, but also a highly configurable Clojure parser*. It has been in development for 3 years and successfully applied in projects like: • babashka and all other SCI-based environments like nbb • clerk • zprint • malli I decided to finally make this project 1.0.0 since I think it's mostly done and will soon be exposed in babashka / nbb as well, so you can read Clojure code from scripts using all the configuration options it offers. Check it out at https://github.com/borkdude/edamame *) or should I say reader? Well, changing those names in the API would be breaking, so sorry :)#2022-05-0410:44imreYou could stil offer alterbative names on the api and mark old ones deprecated ;)#2022-05-0410:45borkdudeI will consider for v2 ;-)#2022-05-0411:11Fabio DominguesAnnouncing clj-depend, a Clojure namespace dependency analyzer. https://github.com/fabiodomingues/clj-depend#2022-05-0518:27borkdudeAnnouncing quickdoc, a minimal and fast API documentation tool. It spits out a pure markdown API.md file (no CSS or JS) in your project based on what clj-kondo finds. It's very fast when invoked using babashka. It can also be used from the JVM as a Clojure tool: clj -Tquickdoc. The output looks like this: • https://github.com/babashka/fs/blob/master/API.mdhttps://github.com/babashka/process/blob/master/API.md Repo: https://github.com/borkdude/quickdoc#2022-05-0518:45nottmeyIs there any reason not to use it? :star-struck:#2022-05-0518:47borkdude@U3ZG4CAF8 I've only tested it on two projects so far, I'm sure there will be some things that need improving :) But the code is very small, so it should be doable to tweak and contribute.#2022-05-0521:56nottmeyIt’s a nice simple approach, and feels natural to developers browsing the github repo page anyway. I like the approach. :thumbsup: I’ll try it out ☺️#2022-05-0611:09borkdudeNow it also supports collapsing namespaces and vars: https://github.com/babashka/sci/blob/master/API.md#2022-05-0805:54bhaim123
Execution error (ExceptionInfo) at clojure.tools.deps.alpha.extensions.git/eval1404$fn (git.clj:74).
Library io.github.borkdude/quickdoc has prefix sha, use full sha or add tag
I get it when I try to install with clj
#2022-05-0806:12borkdudeLike the error says, you need to use the full sha #2022-05-0819:36borkdudeFor people interested in using #quickdoc, I now made a channel: #quickdoc#2022-05-0609:06dharriganI saw this pop-up on Reddit yesterday. I've got zero connection with the project, but I thought it would be nice to share the announcement with the wider community: https://old.reddit.com/r/Clojure/comments/uiwgqd/flowstorm_20_a_time_travel_debugger_for_clojure/#2022-05-0610:51CarloThis is amazing, can't wait for this kind of tooling to support cljs 😍#2022-05-0611:27dmegasThis is amazing, indeed! Thanks for sharing!#2022-05-0613:54borkdudeBabashka 0.8.2 • Convey *print-length* to pprint and allow set!babashka.nrepl: support pprint length • SCI: support invoking field, without dash • Add compatibility with clojure numeric tower • Update deps.clj to tools jar 1.11.1.1113 • Compatibility with fipp and puget • Fix https://github.com/babashka/babashka/issues/1233: don't print error to stdout in prepl • Update process with :pre-start-fn option • Update fs with cwd and Windows glob improvements • Expose edamame Clojure reader, fixes https://github.com/babashka/babashka/issues/549 and https://github.com/babashka/babashka/issues/1258 (#1259) • Support BABASBHKA_PODS_DIR environment variable Babashka 0.8.1 was released earlier in the last month. As it is a good etiquette in this channel to not announce the same library more than once a month, you can view intermediate announcements in #releases or in #babashka#2022-05-0618:43Alex Miller (Clojure team)https://github.com/clojure/tools.namespace 1.3.0 • https://clojure.atlassian.net/browse/TNS-56 - Don't consider :as-alias as a load dependency for namespaces#2022-05-0618:53Alex Miller (Clojure team)https://github.com/cognitect-labs/test-runner v0.5.1 • Bump to latest deps#2022-05-0619:02Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.8.2 • Bump to latest deps#2022-05-1008:46lucashttps://github.com/gethop-dev/user-manager.cognito simple wrapper for working with AWS Cognito User Pools API :)#2022-05-1017:20Mark WardleReally pleased to announce a new release of https://github.com/wardle/hermes - https://github.com/wardle/hermes/releases/tag/v0.12.640 - a SNOMED CT terminology library, and microservice. Now with a new LMDB storage backend and multiple Lucene indexes for fast autocompletion for user entry. New support for the SNOMED Expression Constraint Language (ECL) v2.0 include member, concept and description filters. Useful in building operational health and care applications, in processing healthcare data, in dimensionality reduction in processing diagnostic, symptom and procedural codes in preparation for machine learning. Can import a SNOMED CT distribution in <10 minutes and run as a server, or as a microservice as you wish. Run on a laptop or on multiple cloud-based load-balanced containers. No external dependencies unlike other terminology servers that need elasticsearch clusters.#2022-05-1019:11blueberryClojureCUDA 0.15.0 released! https://twitter.com/hashtag/Clojure?src=hashtag_click now supports the latest CUDA 11.6 GPU computing platform. Many tutorials and even 2 books available to learn how to use it well! https://clojurecuda.uncomplicate.org https://dragan.rocks https://aiprobook.com#2022-05-1115:41nixin72Let’s draw some more eyes to Clojure with a good showing on the StackOverflow survey! https://stackoverflow.blog/2022/05/11/stack-overflow-2022-developer-survey-is-open/#2022-05-1121:46pezA new version of Calva is out https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.273. Below is a list of the last month's updates. You might notice that there re a few #joyride related changes. It really is easy now to get a Clojure REPL running inside VS Code, letting you remote control it to your heart's content. • Fix: https://github.com/BetterThanTomorrow/calva/issues/1696 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1721https://github.com/BetterThanTomorrow/calva/issues/1714 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1707 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1711https://github.com/BetterThanTomorrow/calva/issues/1697 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1692https://github.com/BetterThanTomorrow/calva/issues/1704https://github.com/BetterThanTomorrow/calva/issues/1687 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1683https://github.com/BetterThanTomorrow/calva/issues/1498https://github.com/BetterThanTomorrow/calva/issues/1677 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1219https://github.com/BetterThanTomorrow/calva/issues/1660 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1664#2022-05-1121:54dominicmhttps://github.com/juxt/pack.alpha's docker functionality now supports volumes, env and custom layers. A special thanks to @rickmoynihan's for gifting us these features. If you'd be a user of layers, I'd love your input on https://github.com/juxt/pack.alpha/issues/106. Pack is a clojure packaging tool focusing on conflict-free packaging, covering: Docker, Lambda, OneJar, and more.#2022-05-1319:57Jakub Holý (HolyJak)I use multiple layers, to leverage Docker layer caching for stuff that changes less often, see https://github.com/holyjak/fulcro-billing-app/blob/568bf28552989e1e611773b2d946c9990e1edc3d/Dockerfile#L5-6 (Fixed text; damn autocorrect!)#2022-05-1320:00dominicmInterestingly, pack does that out of the box (I think!). Dependencies go into their own layer. Is that what deps-ext is? Your maven dependencies?#2022-05-1320:03Jakub Holý (HolyJak)Exactly, https://github.com/holyjak/fulcro-billing-app/blob/main/build.sh#L12#2022-05-1207:46blueberryNeanderthal 0.44.0 released with CUDA 11.6 support! High performance programming, matrices, and linear algebra in https://twitter.com/hashtag/Clojure?src=hashtag_click on CPU & GPU. https://neanderthal.uncomplicate.org Good tools need great tutorials; there's tons in Clojure, including two books! https://dragan.rocks https://aiprobook.com#2022-05-1213:14practicalli-johnhttps://github.com/practicalli/spacemacs.d/ configuration for Clojure & LSP for Spacemacs updated with a simpler LSP configuration and support for the http://FreeDesktop.org XDG basedir specification (I now run Emacs 28.1 from ~/.config/emacs with Spacemacs configuration in ~/.config/spacemacs directory) • minimal LSP UI - disables sideline bar and documentation popups on top of LSP UI defaults which are much gentler now • XDG basedir specification - environment variable docs (SPACEMACSDIR) and custom files relative to dotspacemacs-directory so configuration work from ~/.config/spacemacs or ~/.spacemacs.d/ directories • Customize variables section split into its own file, simplifying the versioning of the spacemacs.d/init.el file (so much nicer) • Treemacs history files saved to user-emacs .cache directory (supports XDG spec) • https://github.com/practicalli/spacemacs.d/blob/live/snippets/emacs-lisp-mode/cider-dir-locals snippet to create .dir-locals.el for Clojure CLI tools aliases on REPL startup with cider-jack-in • removed deprecated github layer (all functioning packages now in git layer) Thank you.#2022-05-1317:26Eugenthank you for using XDG dirs. I think most/all apps schould#2022-05-1319:00practicalli-johnThanks. I'm finishing a blog post about setting up XDG for a number of tools. I am finding it very enlightening#2022-05-1310:18ilevdNew library to perform some actions and init some data in compile-time, e.g. set var with git commit info https://github.com/ilevd/compile-time#2022-05-1310:42Ben SlessHow does it differ from the #= reader macro?#2022-05-1311:32ilevdDo you mean tagged literals? Well, you should define them first#2022-05-1311:53p-himikNo, not tagged literals. #= is an eval dispatch tag, or whatever it's called, implemented by EvalReader. Its corresponding form is evaluated at read time but only if *read-eval* is set to true.#2022-05-1312:26ilevdHm. Didn't know about it#2022-05-1312:28Ben SlessIt's one of the least used reader tags#2022-05-1312:29p-himikAlso not documented. And probably for a good reason. :)#2022-05-1403:21zaneWhat would be the good reason? 🙂 #2022-05-1405:54p-himikMisuse. It's one of those features that look simple and really useful on the surface but in reality there are a lot of things to consider and usually some different tool would be more appropriate.#2022-05-1322:39Huahaisymspell-clj 0.4.3 is released. It is a fast spell checker for Clojure that can spell-check English words and sentence. It does some sensible things such as word segmentation, avoiding spell-checking email addresses and numbers, preserve cases, and so on. https://github.com/juji-io/symspell-clj#2022-05-1413:20emccuemicrohttp-ring-adapter v0.0.1 microhttp is a bare bones http server for the most recent releases of Java. It can be useful if you are able to offload HTTPS/TLS to another layer in your infrastructure and want to minimize your dependencies. I took it upon myself to do the pretty straight forward task of making it compatible with ring. If there is interest I will publish to clojars/maven central https://github.com/bowbahdoe/microhttp-ring-adapter#2022-05-1509:44niquolaPure-clojure zero-deps prometheus client https://github.com/HealthSamurai/prometheus.clj#2022-05-1818:17Mark WardleIs this also a recommendation for Prometheus in production? 🙂 #2022-08-0121:16niquolaWe use it in many installations :)#2022-08-2018:37oddsorJust thought I’d perform a bit of necromancy on this thread to say that I just tested this library on my little Babashka-powered webserver that feeds Grafana Prometheus with temperature values. Seems to work great so far!#2022-05-1519:31seriogaBeta version of the fitter — new system components library https://github.com/strojure/fitter#2022-05-1614:49Joshua SuskaloHave you considered writing a tradeoffs section of the readme explaining where this library may fit better into an application than the alternatives#2022-05-1621:07metasoarousAgreed. More generally, the Design goals section could probably be expanded on a bit to give us a moral sense of where the library is coming from.#2022-05-1621:14metasoarousI'm noticing some interesting ideas here; I like how what a component is is kind of flexible.#2022-05-1621:21metasoarousThe other thing I find interesting is "suspend". I'm curious; what's your rationale or use case for this?#2022-05-1817:21seriogaOops, sorry, did not see notifications...#2022-05-1817:24serioga@U5NCUG8NR maybe, when release version will be ready.#2022-05-1817:25Joshua SuskaloOh, since you announced it in #announcements I assumed this was a release version.#2022-05-1817:28serioga@U05100J3V the library is coming from some pain I've got from use of other libraries :-) And I create it firstly for my personal needs#2022-05-1817:29serioga@U5NCUG8NR it was a release of beta version :-)#2022-05-1817:30metasoarousLooking forward to seeing updates on it#2022-05-1817:32serioga@U05100J3V about suspend. Integrant has suspend, I use it and I find it useful in some scenarios.#2022-05-1821:43metasoarousOK; Thanks. I didn't realize integrant had that already. I guess if there's a cheaper way to pause processing or connectivity of some component, being able to plug in and use that as appropriate makes sense. I'm just curious to know more specifics of when you've found that handy, and if there's a particular flow you find yourself using with that.#2022-05-1909:48serioga@U05100J3V my reloaded workflow in large applications means system restart on changes. Some components start slowly (hikary-cp, database migrations), and don't need restart most of the time if related configuration does not change. So I make such components suspendable.#2022-05-2017:49metasoarousGot it; Thanks.#2022-05-2314:41seriogaHello @U05100J3V Would you like to help me to improve readme? I could answer all your questions then you provide suggestions what to add in the readme 🙂 I'm not good in writing documentation...#2022-05-1618:49just.sultanovA Clojure(Script) library for unified responses - io.lazy-cat/tenet v1.0.67 has been released. https://github.com/lazy-cat-io/tenet#2022-05-1706:47Jakub Holý (HolyJak)Nice! I really appreciate the extensive rationale section. And that you pay attention to performance.#2022-05-1712:50wilkerlucioPathom 3 2022.05.17-alpha is out! This is a bug fix release, a few breaking changes on internal representations of mutations, if you used to look for mutation data in the graph generated by the planner you might need to adjust your code. Changes in this update: • Fix nested check on deep dynamic resolver requirements • Fix bad optimization when invalid sub-query isn't the first branch option of a path • Fix multiple calls to same mutation (issue #137) • BREAKING: Mutations are not part of index-ast anymore • BREAKING: ::pcp/mutations now contains the full call AST instead of the mutation key • Fix Optional key throws "All paths from an OR node failed" (issue #138) https://clojars.org/com.wsscode/pathom3#2022-05-1719:46borkdudeScittle is back! Run CLJS directly in browser <script> tags! This time with an nREPL server which lets you develop CLJS files directly connected to your browser! This is released as part of version v0.2.8 A demo: https://twitter.com/borkdude/status/1526285565343281159 Documentation of how to get nREPL working with scittle: https://github.com/babashka/scittle/tree/main/doc/nrepl General scittle documentation: https://babashka.org/scittle/ Channel: #scittle#2022-05-1809:13Chris McCormickSitefox payments is a very beta library for integrating Stripe payments into https://github.com/chr15m/sitefox (ClojureScript backend) sites. https://github.com/chr15m/sitefox-payments#2022-05-1814:38mauricio.szaboHi folks: sometime ago I made https://gitlab.com/mauricioszabo/spock, a wrapper for TuProlog and SWI-Prolog in Clojure. I just published a new "snapshot" version (0.1.1-SNAPSHOT) that adds... ClojureScript support! There's zero documentation on how it works, but hey, tests are documentation right? :rolling_on_the_floor_laughing:. It uses SWI-Prolog compiled to WASM, so it may work anywhere that supports WASM files. I'll add more documentation soon, and some browser examples if possible 🙂#2022-05-1920:55imreAnnouncing https://github.com/imrekoszo/polylith-kaocha In case you are in one of the niche segments of Polylith or Kaocha users, and want to move into the intersection part of the Venn diagram, by making poly test execute tests through Kaocha.#2022-05-2004:06mauricio.szaboWell, newer SNAPSHOT version of https://gitlab.com/mauricioszabo/spock - this one adds support for binding ClojureScript functions! So now one can call ClojureScript from inside Prolog, for these difficult tasks where Prolog is not really good at. It should be considered very alpha, but it's a cool experiment and I'm excited to make another chess game running this time on the browser 😄. Also, fixed a bug where strings with accents will either be sent incorrectly, received incorrectly, both, or break the whole runtime (and in the process, discovered that every single Stackoverflow answer that explains how to send STDIN and read STDOUT from Emscripten-compiled WASM apps only works with ASCII 🥲)#2022-05-2021:22roklenarcicI’ve released an 1.x version of my caching library Memento, moving from Guava to Caffeine, [org.clojars.roklenarcic/memento "1.0.37"] https://github.com/RokLenarcic/memento#2022-05-2021:28roklenarcicmemento redis got a new release as well#2022-05-2109:08sprocketcHappy to announce https://repath.studio/, an electron based SVG editor with an embedded repl, that allows you to interact with the scene or even extend the app on the fly using clojure. Note that this is still in a pre-alpha/prototype stage, so a lot of things might not work as expected. https://github.com/re-path/studio#2022-05-2109:41j abnsThis is really really good!! thanks just played a bit with it. Some feedback: 1. In REPL when i run (db) the output doesn't fold and stretches the canvas area beyond the app width and the right hand side menu becomes unreachable 2. In the top toolbar with the circle etc.. The "page" option doesn't seem related in functionality to the others in the same group. Maybe it should be in its own group? I will play around with it some more when i have some time.#2022-05-2110:03sprocketcHello Javier! The first one is a known issue, I just didn't have the chance to fix it yet. Regarding the second issue, I was considering removing this button since there is another one on the left sidebar that creates new pages, but adding a new group is actually a better option. Thanks for the feedback!#2022-05-2110:20j abnsI ll feedback more when I get a chance. I will try some of my generative art algos 🙂 Thanks for making this!#2022-05-2110:33sprocketcThanks! Fyi, I posted some repl generated images here https://instagram.com/repath.studio#2022-05-2110:56j abnsThose look great, specially number 3, great colors!! Have you consider integrating https://github.com/thi-ng/geom into the app? It has tons of utilities and primitives for geometry manipulation and generating svg. some svg output examples:#2022-05-2112:01sprocketcI tried using thi-ng/color and I do want to play with geom at some point.#2022-05-2115:43nateVery cool! Is there a way to connect from my editor to the REPL for more complex forms?#2022-05-2116:35sprocketcYou can obviously jack-in while you develop. Allowing this on production is a really cool idea!#2022-05-2116:36nate#2022-05-2116:36nateThis is fun!#2022-05-2116:37nateI'm able to make it work by copy/pasting#2022-05-2116:39nateThanks for making this!#2022-05-2116:47sprocketcI am glad you are enjoying it!#2022-05-2311:35simongrayVery cool initiative. Is this currently required to be Electron or could you self-host it on a server with the code as-is?#2022-05-2312:54sprocketcIt is partially coupled with electron (window controls, system fonts etc.). I have thought about this a lot, but I decided to leave it as it is for now. Decoupling is definitely possible but requires a lot of effort, since I would also have to test the app across multiple browsers. I might reconsider this in the near future, if enough people show interest.#2022-05-2122:59eighttrigramsHi there, here's a (super-)small library that started out as an exploration of how I could simplify frontend backend communication in a single page app scenario to the point where calling the backend feels almost like a function call. I'm quite happy with the result and thought I might as well share it: https://github.com/eighttrigrams/defn-over-http.#2022-05-2205:25uochanI've released build.edn, Library making your Clojure library build process easy. It is also helpful to automate release process by GitHub Actions. (I updated my libraries and it makes releases easier:blush:) https://github.com/liquidz/build.edn#2022-05-2219:55just.sultanovCongratulations with the release 🥳 Thank you. I’ve released a similar project a month ago - maybe some ideas will help https://github.com/lazy-cat-io/tools.project#2022-05-2221:13uochanOh, I overlooked your library... Great work! Thanks for your information.#2022-05-2214:50borkdudeA new release of babashka process: v0.1.2! Shell out in Clojure with simplicity and ease. Changelogs: https://github.com/babashka/process/blob/master/CHANGELOG.mdhttps://t.co/ocGFEzcSHi API docs: https://github.com/babashka/process/blob/master/API.mdhttps://t.co/k09g4Y2b6Z Channel: #babashka#2022-05-2315:29ericdalloclojure-lsp Released https://clojure-lsp.io/ 2022.05.23-13.18.11 focusing on improving existing features and fixing some bugs The most notable changes are: Fix Java global cache, java navigation was only working on first time and not after cached. Huge performance improvement on semantic tokens for big files, this should considerably reduce flickering We now have completion of function arguments checking available :keys on function definition:rocket: Improve performance of clean-ns/format on API/CLI. For more details, check #lsp#2022-05-2323:24devnAfter being down for awhile, I’ve rebuilt https://getclojure.org and ran all of the expressions through SCI and made them searchable once again. Note: The expressions that were run date from 2009 to early 2017 so you won’t find parse-long in this data, for example. If anyone has any ideas on collecting more (recent) examples to run through, thoughts on what should be eliminated from the results, tweaks to ranking, etc. I’m all ears.#2022-05-2323:48phronmophobicI have some ideas about gathering examples! Basically any clojure project can be a source for example usages. For my idea, I would break finding examples into 3 steps 1. Generate list of clojure projects 2. Create an automatic or semi-automatic way run parts of projects 3. Extract examples from the clojure you ran 1. Finding projects This is the easiest step. You can get jars from https://github.com/clojars/clojars-web/wiki/Data#useful-extracts-from-the-poms and github projects from https://github.com/phronmophobic/dewey/releases 2. Run parts of projects This is a little tougher. a) One place to start is to just run tests. Many projects have a semi-standard way to run tests. This part might require some manual steps to run the tests. b) A second option is just look for functions that have specs. I have some other ideas here, but I think running test suites and spec'd functions might give the biggest bang for your buck 3. Extract examples from running clojure code Running the code should call the clojure functions you're interested in with actual values. The values that were used to call the function and the return values can be obtained by instrumenting the functions you care about.#2022-05-2402:32dvingoJust pushed up the first release of re-frame subscriptions as a standalone library (with some modifications) https://github.com/matterandvoid-space/subscriptions My original motivation was integrating subscriptions with fulcro, but then realized I could quite easily support arbitrary data sources and UI sinks. There is a sample react hook which should make using any react based rendering library very quick to integrate. Haven't used these yet on any projects (I intend to), but I wanted to get this out so I can focus on some other work and see if any interesting uses come up from others! (Obviously goes without saying - thank you to Mike Thompson and contributors to re-frame and thanks Dan Holmsand for reagent 😄 ) Enjoy!#2022-05-2812:08Jakub Holý (HolyJak)Nice! It's there a demo of using it with #fulcro? Update: I it is :-) ❤️#2022-05-3113:41dvingoya! I'm interested to hear how they work for you. (I am also working on fulcro components to automatic reg-sub calls,.. that will allow you to use subscriptions with fulcro components without writing any reg-subs yourself 😄 ... will ping this channel when it's cleaned up)#2022-05-3115:17Jakub Holý (HolyJak)I will be happy to try this when I stumble upon a good use case :)#2022-05-2407:43simongrayI spent some time yesterday updating the two specialised lists of Clojure resources that I maintain: • https://github.com/simongray/clojure-graph-resourceshttps://github.com/simongray/clojure-dsl-resources In my opinion these two areas in particular comprise the strongest parts of the Clojure ecosystem. PRs are always welcome if you are working in or just interested in these areas! The point is simply to collect all of the currently maintained or mature/done pieces of software in one place, along with articles and other relevant content.#2022-05-2415:08Ivar RefsdalThank you for adding (some) of my repos! ❤️ 🧡 💛 I've also written: https://github.com/ivarref/datomic-schema: Simplified writing of Datomic schemas. https://github.com/ivarref/clj-paginate: Fast pagination of vectors and maps with Clojure for GraphQL. I've never really announced https://github.com/ivarref/rewriting-history, but it has worked fine at my company (for handling GDPR requirements). I also haven't announced https://github.com/ivarref/double-trouble, just finished it, probably will do it tomorrow or so. It works fine in unit tests, and I feel that I got the API "right". Other libs: I also think https://github.com/vlaaad/plusinia should/could be included: Solution to N+1 problem in Lacinia. I haven't used it myself, but it seems very helpful. CC @U47G49KHQ I also know some people like https://github.com/vvvvalvalval/datomock, personally I haven't had a particular use for it. If there is some special debug case with prod data, it could certainly be useful though. CC @U06GS6P1N Thanks again.#2022-05-2506:19simongrayIf you take a second look at the page, you will notice that I have actually already added all of the libraries of yours that you have suggested here except for datomic-schema 😉 I’ll take a look at your other suggestions later today and see where they fit.#2022-05-2506:20simongray(you seem to make so many Datomic support libs that you almost deserve your own category)#2022-05-2517:20Ivar RefsdalOh I see, thank you for your kind words 😊💚#2022-05-2607:49val_waeselynckThanks for mentioning Datomock @UGJE0MM0W 🙂 I think people use it mostly for testing and staging environments. That being said, @U4P4NREBY, I won't insist on Datomock being included on this list: while it can be useful in Datomic project, its benefits are orthogonal to the graphical semantics of Datomic.#2022-05-2609:07simongrayI have updated the list now.#2022-07-1000:03Daniel SlutskyThese lists are wonderful. Just added https://scicloj.github.io/docs/resources/libs/#other-lists- at the top of https://scicloj.github.io/docs/resources/libs/.#2022-05-2408:13msolliNew version of https://github.com/msolli/proletarian, a durable job queuing and worker system for Clojure backed by PostgreSQL: https://github.com/msolli/proletarian/blob/main/CHANGELOG.md#1068-alpha---2022-05-24 • Added on-polling-error option for custom handling of exceptions when polling. • Added failed-job-fnoption - get notified when a job has finally failed after retries. • Added support for enqueuing jobs in the future. Enjoy! Follow-up in #proletarian.#2022-05-2410:55Ivar RefsdalI'm pleased to announce https://github.com/ivarref/gen-fn, a library that rewrites regular Clojure namespaces to Datomic function literals that can run on the transactor.#2022-05-2410:57Ivar RefsdalYes it uses clj-rewrite @UE21H2HHD Thanks! (v0 so far)#2022-05-2410:59lreadCool! I'll get to that fix for you soon so you can move to v1. And then I'll add your lib to our canary tests!#2022-05-2411:00Ivar RefsdalThanks 🙂 It also uses build.edn, worked perfectly, thanks @UBL24PLE6#2022-05-2411:22uochanWow, thank you!#2022-05-2514:46Ertugrul CetinHi all 👋:skin-tone-2:, forgot to mention on Slack so here it goes; I created a 3D multiplayer game prototype written in Clojure and ClojureScript - https://github.com/ertugrulcetin/herfi#2022-05-2515:24Joshua SuskaloMight be worth putting this in #clojure-gamedev too, there's less noise there and people interested in clojure gamedev in particular are likely to see it.#2022-05-2515:26Ertugrul CetinMakes sense!#2022-05-2601:11Chris McCormickThis is super cool! I'm glad to see somebody building on top of px3d despite it being quite a dogs breakfast. 😅#2022-05-2601:11Chris McCormickThe Forest Moons of Yendor is another example for those interested: https://chr15m.itch.io/the-forest-moons-of-yendor#2022-05-2607:47Ertugrul Cetin> This is super cool! I'm glad to see somebody building on top of px3d despite it being quite a dogs breakfast. Hey Chris, thank you for building px3d! It helped me a lot to be able to start threejs with ClojureScript.#2022-05-2713:13AkizHow did you learn px3d? By using it and reading the source? :-) I havent found any documentation but i would love to play with it.#2022-05-2811:33Ertugrul CetinYes, just reading the source code 🙂 It is very clean and straightforward.#2022-05-2911:49Chris McCormick@UBRV1HXPD sorry the documentation is very sparse 😅 - would love some PRs to improve it!#2022-05-2605:27seancorfieldhttps://github.com/seancorfield/usermanager-example -- A little demo web app in Clojure, using Component, Ring, Compojure, Selmer (and a database) -- an example that beginners can digest and build from, that helps teach them the basics. • Now has build.clj and uses tools.build to run tests and build an uberjar#2022-05-2812:12Jakub Holý (HolyJak)Thanks so much for having created and maintaining this!#2022-07-3121:47Michaël SalihiFYI @U04V70XH6, just updated the Reitit/Integrant version with the build setup too. I almost copied/pasted the Build an Uberjar readme's section...I want to make sure you give me permission to use it.#2022-07-3121:55seancorfield@UFBL6R4P3 Absolutely, yes! Thank you for maintaining that alternative version!#2022-08-0106:25Michaël SalihiPerfect, thank you! 🙏#2022-05-2605:42bozhidarCIDER 1.4.1 is out with a couple of small bugfixes! See the release notes (https://github.com/clojure-emacs/cider/releases/tag/v1.4.1) for more details. Cheers!#2022-05-2606:54codeasoneBy the looks of it this release also fixes clojure-emacs/cider#3194 via the nrepl upgrade.#2022-05-2708:38bozhidarIndeed.#2022-05-2613:00kingmobbyte-streams 0.3.1 is out, squashing some ugly bugs. See the changelog here: https://github.com/clj-commons/byte-streams/blob/master/CHANGELOG.adoc#2022-05-2710:13borkdudehttps://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md, a Clojure linter that sparks joy! clj-kondo https://github.com/clj-kondo/clj-kondo/issues/686: new :warn-on-reflection linter. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#warn-on-reflection. • https://github.com/clj-kondo/clj-kondo/pull/1692: new linter :redundant-call - warns when a function or macro call with 1 given argument returns the argument. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#redundant-call. • All new JVM clj-kondo.hooks-api API ns for REPL usage. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/hooks.md#developing-hooks-in-the-repl. • https://github.com/clj-kondo/clj-kondo/pull/1674: config options to limit analysis of var-usages and bodies of var-definitions. Can be used to get a quick overview of a project's namespaces and vars, without analyzing their details. • https://github.com/clj-kondo/clj-kondo/pull/1674: Add support for custom function to be called for progress update, :file-analyzed-fn. • https://github.com/clj-kondo/clj-kondo/issues/1697: update docs and messaging around importing configs (https://github.com/lread) • https://github.com/clj-kondo/clj-kondo/issues/1700: allow discouraged var on non-analyzed (closed source) vars • https://github.com/clj-kondo/clj-kondo/issues/1703: update built-in cache with newest CLJ (1.11.1) and CLJS (1.11.54) versions • https://github.com/clj-kondo/clj-kondo/issues/1704: fix re-frame analysis bug • https://github.com/clj-kondo/clj-kondo/issues/1705: add pre-commit utility support via .pre-commit-hooks.yamlhttps://github.com/clj-kondo/clj-kondo/issues/1701: preserve locations in seqs and symbols in :macroexpand hook • https://github.com/clj-kondo/clj-kondo/issues/1685: Support .clj_kondo hook extension • https://github.com/clj-kondo/clj-kondo/issues/1670: parse error on auto-resolved keyword for current ns • https://github.com/clj-kondo/clj-kondo/issues/1672: support clojure.test/deftest-https://github.com/clj-kondo/clj-kondo/issues/1678: support with-precision Channel: #clj-kondo#2022-05-2718:45borkdudeReleased a small update that fixed a regression: 2022.05.28#2022-05-2722:27mauricio.szaboJust published Clover version 0.3.0 - a socket REPL package for VSCode (exactly the same as Chlorine, but for VSCode and Codium). This new version adds support for Joyride by defining an API that's callable from Joyride (check the README: https://gitlab.com/clj-editors/clover#integration-with-joyride for more information) with interesting commands to also get blocks, top-blocks, current var and namespace, even without a REPL connected. It also exposes the user-defined custom commands over a quite experimental API for now! Discussions on #chlorine-clover.#2022-05-2815:04eighttrigramsHere's a collection of examples I have put together which demonstrate the usage of selected Clojure libraries. It is made in a beginner friendly style which shows their usage within context, but reduced to its essentials, such that one sees what exactly is going on. https://github.com/eighttrigrams/cljc-minimals#2022-05-2817:24Ivan FedorovUpdated space-ui a bit, from notable changes – added validation support for inputs and lines https://github.com/spacegangster/space-ui#2022-05-2913:14uochanJust released build.edn ver 0.3.82, Library making your Clojure library build process easy. https://github.com/liquidz/build.edn Now, deploy-repository setting is supported to manage repository URLs and credentials (including encrypted password in ~/.m2/settings.xml) See the following document for more details 🙂 https://github.com/liquidz/build.edn/blob/main/doc/deploy.adoc#2022-05-2916:49DumchDart to Clojure converter, first release (0.1.2). It's pre-alpha now, but it works for most of the cases when you want to translate flutter widgets. https://github.com/Liverm0r/DartClojure#2022-05-2916:57DumchUsage example in Idea https://www.youtube.com/shorts/b5M-d_CYH6w#2022-05-2919:30ericdalloIs it possible to convert a whole file too? it'd be nice to create a Emacs/YourFavEditor package to do that automatically!#2022-05-2920:44DumchIt won't work for a whole file now because it doesn't support clasees and methods declaration. It also doesn't support assignments and just convert it to :unidiomatic. I will think about macking a full converter, but now it's just a tool to copy widget's part, like in the image:#2022-05-2920:53kennytiltonI think I just found my (macro-expand (widget ......)` solution! Thx even more! 🙏#2022-05-3117:39javahippieI wrote a naive online Initializer for Luminus Projects (kit-clj to be added, soon). It’s really fresh, very beta, I would love some input on this! https://clojure-initializer.herokuapp.com#2022-05-3117:41javahippieI wanted to create something beginner-friendly. It does nothing more than to wrap the Luminus Lein Template, but all possible modules are listed in their specific category, can be browsed and filtered.#2022-05-3117:42respatializedit seems like you can add components as many times as you like but can't remove them in the UI:#2022-05-3117:44javahippiereally beta 🙈 Thanks for pointing that out, I will add some remove buttons and store the components in a set#2022-05-3118:13javahippieShould be fixed, now.#2022-06-0108:59danielnealIt’s a cool idea, I always thought it would be nice to have something like this. Might be nice to handle react native projects too#2022-06-0109:24javahippieFor now I plan to add kit-clj, but I’m open to support other templating mechanisms that I might not know yet#2022-05-3120:14blueberryDeep Diamond 0.23.0 released. https://twitter.com/hashtag/Clojure?src=hashtag_click high performance Tensor and Deep Learning library now supports recurrent networks (still in preview on CPU, GPU soon). Check it out at https://github.com/uncomplicate/deep-diamond Big thank you to all members of Clojurists Together who generously supported this work! Next, on to the book update: https://aiprobook.com/deep-learning-for-programmers/#2022-06-0110:11seriogaThe system component management library for Clojure strojure/fitter version 1.0.68 has been released. https://github.com/strojure/fitter#2022-10-2101:28onetomhave you considered the rmap + redelay approach demonstrated by the author of mount-lite in this article? https://functionalbytes.nl/clojure/redelay/rmap/2020/06/26/redelay.html#2022-10-2418:41seriogaNo, I have not#2022-06-0113:33seriogastrojure/caffeine-memoize — Clojure function memoization using Caffeine java library https://github.com/strojure/caffeine-memoize#2022-06-0114:57seriogastrojure/memoize-one — Clojure library for memoization of the single value. https://github.com/strojure/memoize-one#2022-06-0116:01pezjoyride Joyride continues to make VS Code ever more hackable, reaching version 0.0.15 today. Come'on join the #joyride! Already both #chlorine-clover (the Clover version) and #calva have added Extension API:s making them even more scriptable using Joyride. We're hoping more VS Code extensions will follow suit. Especially Clojure related ones, like the #portal extension. Here are the changes since the last announcement (well, including the v0.0.1, haha): [0.0.15] - 2022-06-01 • https://github.com/BetterThanTomorrow/joyride/issues/73 [0.0.14] - 2022-05-31 • Add some logging when Joyride starts and finishes activating [0.0.13] - 2022-05-30 • https://github.com/BetterThanTomorrow/joyride/issues/71 [0.0.12] - 2022-05-18 • https://github.com/BetterThanTomorrow/joyride/issues/68`promesa.core`https://github.com/BetterThanTomorrow/joyride/issues/68 [0.0.11] - 2022-05-15 • Fix: (require)https://github.com/BetterThanTomorrow/joyride/issues/38https://github.com/BetterThanTomorrow/joyride/issues/63`my-lib`https://github.com/BetterThanTomorrow/joyride/issues/63 [0.0.10] - 2022-05-15 • https://github.com/BetterThanTomorrow/joyride/issues/56https://github.com/BetterThanTomorrow/joyride/issues/57 [0.0.9] - 2022-05-11 • https://github.com/BetterThanTomorrow/joyride/issues/24 • Fix: https://github.com/BetterThanTomorrow/joyride/issues/40https://github.com/BetterThanTomorrow/joyride/issues/49 • Fix: https://github.com/BetterThanTomorrow/joyride/issues/51https://github.com/BetterThanTomorrow/joyride/issues/52https://github.com/BetterThanTomorrow/joyride/issues/46 [0.0.8] - 2022-05-09 • https://github.com/BetterThanTomorrow/joyride/issues/4https://github.com/BetterThanTomorrow/joyride/issues/36https://github.com/BetterThanTomorrow/joyride/issues/42`joyride.core/get-`https://github.com/BetterThanTomorrow/joyride/issues/42https://github.com/BetterThanTomorrow/joyride/issues/43`*1`https://github.com/BetterThanTomorrow/joyride/issues/43`*2`https://github.com/BetterThanTomorrow/joyride/issues/43`*3`https://github.com/BetterThanTomorrow/joyride/issues/43`*e`https://github.com/BetterThanTomorrow/joyride/issues/43 [0.0.7] - 2022-05-06 • https://github.com/BetterThanTomorrow/joyride/issues/8 [0.0.6] - 2022-05-06 • https://github.com/BetterThanTomorrow/joyride/issues/33 [0.0.5] - 2022-05-06 • Fix https://github.com/BetterThanTomorrow/joyride/issues/32`startNReplServer`https://github.com/BetterThanTomorrow/joyride/issues/32`root-path`https://github.com/BetterThanTomorrow/joyride/issues/32 [0.0.4] - 2022-05-05 • https://github.com/BetterThanTomorrow/joyride/issues/28whenhttps://github.com/BetterThanTomorrow/joyride/issues/29 [0.0.3] - 2022-05-02 • https://github.com/BetterThanTomorrow/joyride/issues/5`joyride.core/*file*` • https://file+.vscode-resource.vscode-cdn.net/Users/pez/Projects/joyride/(https://github.com/BetterThanTomorrow/joyride/issues/20)https://file+.vscode-resource.vscode-cdn.net/Users/pez/Projects/joyride/(https://github.com/BetterThanTomorrow/joyride/issues/20)https://file+.vscode-resource.vscode-cdn.net/Users/pez/Projects/joyride/(https://github.com/BetterThanTomorrow/joyride/issues/20) >https://file+.vscode-resource.vscode-cdn.net/Users/pez/Projects/joyride/(https://github.com/BetterThanTomorrow/joyride/issues/20)https://github.com/BetterThanTomorrow/joyride/issues/5 [0.0.2] - 2022-04-27 • Assorted fixes, e.g. https://github.com/BetterThanTomorrow/joyride/issues/3 [0.0.1] - 2022-04-27 • https://marketplace.visualstudio.com/items?itemName=betterthantomorrow.joyride ◦ Workspace scripts ◦ nREPL server #2022-06-0121:08uochanJust released antq ver 1.7.798 Tool to point out your outdated dependencies. https://github.com/liquidz/antq Added support for upgrading GitHub Actions workflow files at last! This feature is experimental, but it should work.#2022-06-0200:09ribeloAn attempt to combine best solutions from re-frame and pathom. A repl friendly, https://github.com/leonoel/missionary/ based incremental computation framework for clojure & clojurescript. https://github.com/ribelo/praxis#2022-06-0200:10ribeloexample of usage#2022-06-0200:10ribelohttps://github.com/ribelo/praxis/tree/master/examples/todomvc#2022-06-0200:25ribelohttps://github.com/ribelo/praxis-react/blob/master/src/main/ribelo/praxis/react.cljs#2022-06-0204:33Aleedglad to see this! looking forward to trying it out#2022-06-0212:53Daniel JompheImpressive! What parts of pathom does this put forward?#2022-06-0218:45ribelo@U0514DPR7 defnode and graph building#2022-06-0218:46ribeloexcept that it works the reverse way, as pathom pulls in data and missionary pushes up data#2022-06-0218:47ribeloin praxis you can also use another node as an argument in defnode and everything is automatically incrementally recalculated just like in excel#2022-06-0218:48ribeloyou can think of nodes as cells in a spreadsheet#2022-06-0220:03dvingothis is super exciting! thanks for sharing this - i've been thinking about an implementation of subscriptions using missionary (https://github.com/matterandvoid-space/subscriptions/issues/1) but now I don't need to 😄#2022-06-0307:07Jakub Holý (HolyJak)I have no idea what this is about 😅 Even looking at the example I am not sure what is it I am looking at. I would very much appreciate if the readme had a rationale 🙏#2022-06-0307:24ribelo@U0522TWDA https://cljdoc.org/d/com.github.ribelo/doxa/0.1.156/doc/rationale#2022-06-0307:26Jakub Holý (HolyJak)Thank you! How does doxa relate to praxis?#2022-06-0307:28ribelono common parts, but solutions are complementary#2022-06-0307:28Jakub Holý (HolyJak)BTW there is a typo in ☝️ (bold) > unfortunately flatland it doesn’t support cljs #2022-06-0307:29ribelopraxis + doxa is like re-frame + datascript + re-posh#2022-06-0307:30ribelodoxa is used by two brave people in production while praxis is a kind of tinkering. missionary is difficult and I don't really understand what's going on underneath so I have no idea if it will explode in some extreme case#2022-06-0307:31Jakub Holý (HolyJak)I see. Thank you!#2022-06-0213:11borkdudeAnnouncing babashka CLI, a library which eases command line parsing for Clojure! https://github.com/babashka/cli
org.babashka/cli {:mvn/version "0.1.1"}
It intends to be easy, and does not support validation, or everything that you might expect from an arg-parse library. I think a lot of these things can be done using spec or otherwise, nowadays. It adopts almost the same style as -X invocations in the clojure CLI, but it does not coerce values using EDN automatically. It does offer a light-weight way to coerce strings. It can be used together with the clojure CLI: https://github.com/babashka/cli#usage-with-the-clojure-cli Adding support for functions invoked with the :exec alias does not introduce a dependency of babashka.cli, so you can add support without bringing in a dependency. Perhaps doing so will cause less friction with shell usage (Windows, etc). You can have support for both -X and -M:exec usage without making a compromise.
#2022-06-0213:27jjttjjI really like the lack of attempting to parse argument values. Argument escaping is painful on Windows with the Clojure cli parsing#2022-06-0213:43Daniel JompheSo, would this ring true? • more control than tools.cli, and • less deps & batteries than cli-matic#2022-06-0213:44borkdudeless deps for sure, it has no deps :) it doesn't do a lot, except parsing and optionally coercing#2022-06-0215:39borkdudeNow on clojars:
org.babashka/cli {:mvn/version "0.1.1"}
#2022-06-0213:50mkvlr🔭 Clerk – Moldable Live Programming for Clojure io.github.nextjournal/clerk {:mvn/version "0.8.445"} has been released on https://clojars.org/io.github.nextjournal/clerk. This release simplifies and extends the reach of the viewer API to the root node, taking Clerk beyond notebooks. Highlights are: • 🎠 Clerk Slideshow as a separate packages ◦ Watch it in action in the 📼 below ◦ https://snapshots.nextjournal.com/clerk-demo/build/63c22686b3310d6ddc91f454e574dde7c1655563/notebooks/slideshow.html yourself in the static build 🏗️:juggling: https://github.com/nextjournal/clerk-demo/blob/63c22686b3310d6ddc91f454e574dde7c1655563/notebooks/slideshow.md🐙 https://github.com/nextjournal/clerk-slideshow🧪 Clerk Examples – A macro that does nothing outside of Clerk (like clojure.core/comment but gives you rich, moldable examples inside. https://snapshots.nextjournal.com/clerk/build/85b99025446d9e36497a3b1bf33789b5d54c2711/index.html#/notebooks/example.clj. 🎬🔢 Various improvements to the table viewer, including support for nested tables, selecting viewers in cells & more • :ladybug: Various bug fixes and other improvements, see full https://github.com/nextjournal/clerk/blob/41ec73c957668e49eaaed835b6cbc9e24aeaae1c/CHANGELOG.md#08445-2022-06-01.#2022-06-0214:44Robert A. RandolphState of Clojure 2022 results are available! https://clojure.org/news/2022/06/02/state-of-clojure-2022#2022-06-0215:36imreis there a way to download the raw response data?#2022-06-0217:14Robert A. Randolph@U08BJGV6E There is not#2022-06-0218:02imreThanks anyway. Wanted to look through the freetext answers a bit more, the survey UI isn't the best for that#2022-06-0222:26ribelohttps://github.com/ribelo/doxa - a simple, fast, in-memory datalog database. The whole project was rewritten from scratch to get rid of the meander dependencies and to fix all the previous problems. It is simpler, nicer, https://cljdoc.org/d/com.github.ribelo/doxa/0.1.159/doc/benchmark and the code should be completely understandable for everyone. Furthermore, there is https://cljdoc.org/d/com.github.ribelo/doxa/0.1.159/doc/readme , examples, and a https://ribelo.github.io/doxa/#2022-06-0304:53Teemu KaukorantaI noticed it's licensed using Unlicense. That might mean that some people might not be able to use it. If you want to reach more people I would consider changing the license.#2022-06-0304:55Teemu Kaukorantahttps://softwareengineering.stackexchange.com/a/147120 I am not a lawyer either :)#2022-06-0308:05Karol WójcikI would love to see how it can be used with reagent/re-frame. Could you please share the sources of the examples listed on the page?#2022-06-0308:10ribelo@UJ1339K2B https://github.com/ribelo/doxa/tree/gh-pages/src/main/ribelo/doxa_page#2022-06-0304:45ClojaskHello! We are very excited to share with you the first release of {:tag :a, :attrs {:href "https://github.com/clojure-finance/clojask"}, :content ("https://github.com/clojure-finance/clojask")}. Clojask is a parallel data processing framework that is designed for large datasets, inspired by Dask, Spark and NoSQL databases. Features: • Optimized for larger-than-memory datasets • Various Operations, including https://clojure-finance.github.io/clojask-website/posts-output/API/#group-by, https://clojure-finance.github.io/clojask-website/posts-output/API/#aggregate, https://clojure-finance.github.io/clojask-website/posts-output/API/#inner-join--left-join--right-join, even for larger-than-memory datasets! • Faster than Dask on most of our https://clojure-finance.github.io/clojask-website/pages-output/about/#benchmarks • All native data types • From file to file • Parallel computation • Lazy operations #clojask#2022-07-0714:02punit-naik@U03JDCVV1MX I see that clojask will be run using Onyx. But active development on onyx has been stopped since 31 August, 2019. Will this be a problem? Just wondering.#2022-07-0714:38ClojaskYes, it has been a problem for us mostly with the Java supported version. Clojask supports Java 8-11 only because Onyx only supports these.#2022-07-0812:39ClojaskIf necessary we would be willing to make some fixes in the future to Onyx to use a different version of Java. So far in the past, however, we have focused on getting Clojask up and running.#2022-07-0812:40punit-naikGot it!#2022-06-0307:36kingmobGloss 0.3.0 is now out for all your on-the-wire byte parsing needs! https://clojars.org/org.clj-commons/gloss Major changes: • Fix JDK11+ reflection bug • Support Graal • Add int24 and uint24 support Many thanks to the contributors: Zach Tellman, Alexander Kahl, Mihir Rege, Erik Assum, Matthew Davidson, skynet, and Ning Sun#2022-06-0408:45Vincent Cantinhttps://github.com/green-coder/girouette is released. It is a big step from the last version, as this one brings compatibility (with some caveats) with Tailwind v3. Please see https://github.com/green-coder/girouette/blob/master/CHANGELOG.md for more details. Big thanks to all contributors 💜#2022-06-0422:22Dumchhttps://github.com/Liverm0r/DartClojure translator version 0.1.7 is released! Strings enhancements, hints support, conversion improvements. https://github.com/Liverm0r/DartClojure/releases/tag/0.1.8 P. S. Update to 0.1.8 with bug fixing#2022-06-0422:23Dumch#2022-06-0513:55Ferdinand BeyerI am super excited to announce the release of https://github.com/ferdinand-beyer/init (`v0.1.77`)! Init is an application initialization / dependency injection micro-framework, similar to Integrant and Component, but uses metadata on vars to define components. It combines ideas from before-mentioned Clojure libraries and Java projects such as Dagger 2, Guice or Spring using annotation-based configuration via @Inject. While being opinionated, Init respects your preferences and lets you mix and match techniques to your liking. • Repo: https://github.com/ferdinand-beyer/init • Introduction, Docs: https://cljdoc.org/d/com.fbeyer/init/0.1.77/doc/introduction Init is quite young and not battle tested yet. Looking forward to feedback from the community!#2022-06-0609:18joseAnnouncing the first clj-nix release (0.1.0): https://github.com/jlesquembre/clj-nix clj-nix helps you to build Clojure applications with nix. It supports: • Create a binary from a Clojure application • Create an optimized JDK runtime to execute the Clojure binary • Create GraalVM native images from a Clojure application #2022-06-0621:27DannyThanks for this.#2022-06-0615:16mpenetNew release of https://github.com/exoscale/lingo : bugfix on multimethod dispatch failure#2022-06-0716:35practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user level configuration for Clojure CLI library version updates and moving local maven repository to FreeDesktop XDG Cache Home • Set :mvn/local-repo to XDG_CACHE_HOME location, ~/.cache/maven/repository as described in the https://practical.li/blog/posts/adopt-FreeDesktop.org-XDG-standard-for-configuration-files/ • Update .github/workflows/lint-with-clj-kondo.yml to version 2022.05.31 • Update library versions using clojure -T:search/outdated > command (see https://github.com/practicalli/clojure-deps-edn/blob/live/CHANGELOG.org#2022-06-06 for library version details) #2022-06-0721:55Carsten BehringA new release of , the idiomatic machine learning library for Clojure, is out. Version 0.2.1 contains some bug fixes of the built-in plugins. https://clojars.org/scicloj/scicloj.ml/#2022-06-0816:54joshmillerFor those interested in using ClojureScript to build React Native applications, I built a template that ties together the latest version of RN with Krell, along with a workflow for building dumb templates in JavaScript that you can design and test in Storybook. It’s a one-liner to install: npx react-native init YourProjectName --template react-native-template-cljs-krell-storybook https://github.com/joshuamiller/react-native-template-cljs-krell-storybook#2022-06-0818:09borkdudeBabashka 0.8.156 (the 156th release) Full release notes https://github.com/babashka/babashka/blob/master/CHANGELOG.md#08156-2022-06-08. Highlights: • native M1 binary! When upgrading with brew or the installer script, you should now get the native binary instead of the amd64 one. • Compatibility with prismatic/schema. There is an open PR which wil be merged soon (thanks @ambrosebs!). Meanwhile you can use this https://github.com/borkdude/schema/tree/bb-test-suite. And many small improvements and upgrades of built-in libraries. Thanks to all involved! babashka#2022-06-0917:45lreadrewrite-clj v1.1.45 (the 45th release of rewrite-clj!) Finally decided to drop the alpha status. Highlights from the https://github.com/clj-commons/rewrite-clj/blob/main/CHANGELOG.adoc#v1145: • now properly escaping inline double quotes for coerced strings https://github.com/clj-commons/rewrite-clj/issues/176 - thanks to @ivar.refsdal for raising the issue! • renamed zipper creation functions that take a rewrite-clj node as input. The old names did not reflect their purpose which led to confusion. Old functions will remain but are marked as deprecated. https://github.com/clj-commons/rewrite-clj/issues/178rewrite-clj.zip/ednrewrite-clj.zip/of-noderewrite-clj.zip/edn*rewrite-clj.zip/of-node*#2022-06-1008:17Ivar RefsdalThanks a bunch! 😻#2022-06-1014:07lreadThank you @ivar.refsdal for helping me to understand that issue was an issue!#2022-06-0920:11Mark WardleClosing in on a v1.0 release, but here is hermes v0.12.681 https://github.com/wardle/hermes/releaseshttps://github.com/wardle/hermes/releases- smaller, with fewer transitive dependencies. Deployed in one of the largest emergency units in the UK, in the University Hospital of Wales, Cardiff, UK. This is a Clojure rewrite of tools previously written in java, and then later in Go, but this clojure version is far more capable with a fraction of the number of lines of code. This is an implementation of SNOMED CT, an international clinical terminology and ontology.#2022-06-0920:53refsetHey Mark - I just spotted "effective-time" in the code base 🙂 ...there are a lot of similarities with XTDB in fact - we should definitely chat/meet sometime! Btw, it looks like your link has a stray '-' at the end https://github.com/wardle/hermes/releases/tag/v0.12.681#2022-06-0920:55Cora (she/her)yep, the - in there threw me off, too#2022-06-0920:56Mark WardleThanks - fixed now :)#2022-06-0921:06Mark WardleThis is nothing as complex or sophisticated as xtdb, but it does use Lucene and lmdb as backend stores to help deal with the size of this terminology. I am planning on using xtdb for a clinical data repository next! Would be great to chat. #2022-06-0920:19Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1119 is now available • https://clojure.atlassian.net/browse/TDEPS-213 - Add -X:deps aliases to list available aliases • https://clojure.atlassian.net/browse/TDEPS-226 - More nunanced error handling for s3 downloads • Better error message when git url can’t be inferred#2022-06-0923:21seancorfieldclojure -X:deps aliases is nice -- thankyou!#2022-06-0923:05DumchDart-&gt;Clojure 0.1.10 released Release https://github.com/Liverm0r/DartClojure/releases/tag/0.1.10. Highlights: • Great thanks to @pez 🙏 for supporting cljc. Now it could be used from cljs world (not tested extensively though); • Support multiple vars declarations:#2022-06-0923:12Dumch^:const are visible in shell or with :string :format option#2022-06-1011:36pezFollow up to ^ that announcement: https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.283 (a.k.a. #clojured edition, a.k.a #clojuredart release). • https://github.com/BetterThanTomorrow/calva/pull/1763ClojureDart converter> • https://github.com/BetterThanTomorrow/calva/issues/1741 Thanks, @isak for making Calva Paredit better! ❤️ 🙏#2022-06-1023:57ambrosebshttps://github.com/plumatic/schema 1.3.0 • https://github.com/plumatic/schema/pull/440 (coincides with above announcement for Babashka 0.8.156 ^)#2022-06-1100:18ambrosebshttps://github.com/typedclojure/typedclojure https://github.com/typedclojure/typedclojure/blob/main/CHANGELOG.md#1031-20220611
- don't check namespace if `^:typed.clojure/ignore` or `^{:typed.clojure {:ignore true}}` meta
  - eg., `(ns ^:typed.clojure/ignore foo)`
- introduce `typed.clojure/check-dir-clj{s}` for type checking directories of code
- introduce `typed.clojure.main` for command line usage
- improve `^::t/dbg` output
- fix `[:maybe]` case in Malli schema to static type translation
- simplify malli schemas `[:and s1 s2 s3 ...]` to `s1` in type translation to avoid tricky subtyping cases
#2022-06-1201:07Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1124 is now available • Fixed bug in TDEPS-213 fix in 1.11.1.1119 - oopsie! Thx to Mathieu Lirzin for seeing it.#2022-06-1209:52javahippieJust released clj-test-containers 0.7.1: https://github.com/javahippie/clj-test-containers/releases/tag/0.7.1 We updated to testcontainers-java 1.17.2 and included the new allowInsecure flag to the HTTP wait strategy#2022-06-1213:40borkdudeEnjoyed your lightning talk!#2022-06-1218:00javahippieVery happy to hear that, thanks! 🙂#2022-06-1218:08borkdudeA pity I didn't get to meet you, next time :)
#2022-06-1316:16richiardiandreaNice thanks for that, we'll test in our CI and report back in case!#2022-06-1316:23javahippie@U0C8489U6 Always happy about feedback (our CI already uses the new version)#2022-06-1322:31richiardiandreaIt seems like CI is happy here - cool stuff!#2022-06-1221:18borkdude#nbb - Scripting in Clojure on Node.js using SCI. v0.3.6 - v0.5.115 A lot happened in the past two months - you can read the https://github.com/babashka/nbb/blob/main/CHANGELOG.md for the details. An exciting new feature was implemented today during a trainride from Berlin (#clojured to home): Nbb now comes with https://github.com/babashka/nbb#prismaticschema and https://github.com/babashka/nbb#metosinmalli as optional separate npm dependencies! https://github.com/babashka/nbb#prismaticschema https://github.com/babashka/nbb#metosinmalli An implication of this is that we can add more built-in open source libraries to nbb in the future, without bloating the default npm package.#2022-06-1413:38Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1129 is now available • Fix directory context of -X:deps prep with transitive local deps#2022-06-1414:11Dumchhttps://github.com/Liverm0r/DartClojure translator https://github.com/Liverm0r/DartClojure/releases/tag/0.2.0. Support: for in, switch, try-catch. Do not insert material aliase on core classes like Duration, Uri, Set . Substitutes print with dart:core/print. Instead of fails, returns :unidiomatic on while, for with modifications, switch with continue. returns :unknown for enums.#2022-06-1509:45genmeblogTablecloth 6.088 (https://clojars.org/scicloj/tablecloth) - a dataset/data frame manipulation library updated. • Small dataset creation fixes • joins refactored to enable join on different columns • cross-join, expand and complete (last two known from tidyr) added (docs: https://scicloj.github.io/tablecloth/index.html#Cross)#2022-06-1511:53otfromAwesome. Thanks!#2022-06-2008:43genmeblog6.090 is the newest one (with a bugfixes)#2022-06-2012:27otfrom@U1EP3BZ3Q thx for this. has this been pushed yet? I don't see it on clojars#2022-06-2012:31genmeblogomg... indeed! Give me 20 minutes.#2022-06-2012:32otfromthx 🙂#2022-06-2012:32otfromwanted to give the new complete a go#2022-06-2012:35genmebloggreat! I need it to be tested 🙂#2022-06-2012:36genmeblog6.090 is on Clojars now (verified!)#2022-06-2012:36otfrom🆒#2022-06-2012:41otfromlooks good so far 🙂 . I've put the results in the zulip thread https://clojurians.zulipchat.com/#narrow/stream/151924-data-science/topic/complete.20ala.20R/near/286789226#2022-06-2012:42genmeblogThanks!#2022-06-2012:51otfromok, that was a lot faster than the bad version I wrote using combinatorics and tc/concat 🙂#2022-06-1612:27Ivar RefsdalI'm pleased to announce https://github.com/ivarref/mikkmokk-proxy, an unobtrusive reverse proxy that does fault injection at the HTTP layer. It can be used to test the resiliency of your services. mikkmokk can: • Insert faults (before or after) accessing the destination. • Add delays (before or after) accessing the destination. • Make duplicate requests. It can be instructed when and if to inject faults by: • Statically using environment variables. • One-off errors using the admin API. The admin API also supports setting new defaults. • The client using http headers per request.#2022-06-2008:30Jakub Holý (HolyJak)I typically use https://github.com/shopify/toxiproxy that works at the TCP level. Great to add another tool to my toolbox!#2022-06-2015:18Ivar RefsdalThanks 🧡 ! I've linked toxiproxy and some other tools under https://github.com/ivarref/mikkmokk-proxy#alternatives-and-related-software. I don't have much experience with toxiproxy nor the other tools yet though.#2022-06-2015:19Ivar RefsdalPS I did read your https://blog.jakubholy.net/2017/05/09/simulating-network-timeouts-with-toxiproxy/ from 2017 when researching this. Great post, thanks!#2022-06-2015:22Jakub Holý (HolyJak)My pleasure! I saw the list of related tools eventually :-) Thank you for it, I have to check those out too.#2022-06-1614:18eskosTriplicate release of git-revisions (formerly lein-git-revisions): > Generate software revision strings based on Git and system context data. git-revisions is a DSL driven tool for generating version strings based on available metadata such as git tags, commit SHAs and counts, environment variables and current date and time paired with possibility to automate the whole next version resolving logic - in fact all the related project repositories are self-recursive, as a developer I do not set the version strings manually at all. The logic is now split and there are three possible ways to use the tool: • https://github.com/esuomi/git-revisions 1.2.0 is the reworked core only • https://github.com/esuomi/git-revisions-lein 1.1.0 provides the tool as Leiningen plugin • and finally the motivator for this split, https://github.com/esuomi/git-revisions-buildtools 0.1.0 which provides the tool as tools.build friendly version#2022-06-1614:40mpenetnew https://github.com/exoscale/coax version available (improves ex-data in coax/coerce!)#2022-06-1614:44mpenethttps://github.com/exoscale/tools.project also went through a number of bugfixes/additions this week (template init, prep-tasks etc).#2022-06-1614:45DumchDart->Clojure translator https://github.com/Liverm0r/DartClojure/releases/tag/0.2.2 (allow file translation). Thanks to @borkdude for help 🙌 Now it's only m1 and aarch64, but there is a docker file and a script to build it locally (https://github.com/Liverm0r/DartClojure#contribution). P.S. also allowed file translation like: ./dartclj -p path/to/main.dart#2022-06-1614:45Dumchhttps://twitter.com/ArturDumchev/status/1537446007822159876?s=20&amp;t=rRrKgUnTM7Gv0fqUY3RgTg#2022-06-1614:46Dumch@U2N9GDB1U @UKFSJSM38 what's needed to get it to work with emacs? (I am not a Emacs user)#2022-06-1614:48pezCool with a native build! Maybe we should publish an npm module as well? (I say ”we” because I could do some of that work, if you like.)#2022-06-1614:50ericdallo@UL05W6AEM I think we can create a emacs package that calls the native binary :) I did something similar to #jet but it was so sinole that it didn't need a package, only a simple emacs function, even so a package sounds nice#2022-06-1614:52Dumch@U0ETXRFEW, would be great if you help 🙂 @UKFSJSM38, before you were asking if it would be possible to translate files. I can now write a function to support it, but I don't know if it is really neded#2022-06-1614:53ericdalloYeah, supporting both a file/files and a text string sounds useful for the plugin, simar to #jet cli#2022-06-1614:54DumchOk, I will support it in the next release#2022-06-1619:41DumchAdded file translation support, update header#2022-06-1705:26pezHaving some progress with the npm build.#2022-06-1817:00pezhttps://github.com/Liverm0r/DartClojure/pull/13#2022-06-1900:45DumchThank you! I will check it tomorrow#2022-06-1619:51borkdudeA new version of #jet: a command line tool to convert between JSON, EDN and Transit! v0.2.18 (the 18th release!) It now colorizes output automatically when you are connected to a terminal. And it also supports specter now:
$ echo '{:a {:a 1}}' | ./jet -t '(s/transform [s/MAP-VALS s/MAP-VALS] inc)'
{:a {:a 2}}
And also, there's an ARM (M1 compatible) binary now when you install it via brew! And lastly, there are --thread-first / -t and --thread-last / -T options to offer a shorter notation than --func / -f Enjoy! jet https://github.com/borkdude/jet/blob/master/CHANGELOG.md Channel: #jet
#2022-06-1620:28borkdudeThanks to @U0A74MRCJ who explained to me how I could call the isatty C function from Graal to detect a connected terminal#2022-06-1700:52nateAwesome. That sounds like it would be useful in babashka too. #2022-06-1707:12borkdude@U0510902N "it" = checking if stdout is connected to tty?#2022-06-1714:15nateYeah, to be able to tell if a bb script is in a pipe or run on it's own. #2022-06-1714:29borkduderight. we could expose this stuff in bb. feel free to make an issue#2022-06-1714:31nateWill do#2022-06-1714:35borkdudeThere is also (System/console) btw#2022-06-1714:35borkdudeThat will return nil in a pipe#2022-06-1714:36borkdudeBut it will also return nil when stdin is connected to a pipe. This is why it wasn't sufficient for jet#2022-06-1715:53borkdude#jet is now available for deps.edn too: https://github.com/borkdude/jet#depsedn I was able to support both -M and -X/-T style invocations with minimal boilerplate thanks to #babashka-cli :-D#2022-06-1722:21nateIssue created: https://github.com/babashka/babashka/issues/1299#2022-06-1620:44Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1139 is now available: • Add clj -Ttools install-latest api function, examples: ◦ Install tool: clj -Ttools install-latest :lib io.github.clojure/tools.deps.graph :as graph ◦ Update tool: clj -Ttools install-latest :tool graph • Fix regression with clj -X:deps find-versions from 1.11.1.1119 • Output from clj -X:deps find-versions now provides :git/tag and :git/sha • Update to tools.tools v0.2.6 • Use https://github.com/clojure/tools.deps.alpha/blob/master/CHANGELOG.md 0.14.1205 (there are also new releases of tools.deps.alpha, tools.gitlibs, and tools.tools)#2022-06-1705:12vemvnvd-clojure - security checker - https://github.com/rm-hull/nvd-clojure/blob/v2.7.0/CHANGELOG.md#changes-from-260-to-270 Maintenance release upgrading DependencyCheck, which helps zapping false positives.#2022-06-1708:26rickmoynihanOh that reminds me, I totally forgot to mention this here… we made an nvd-clojure github action that you can “just” drop into your repo to report dependency check issues. It currently reports any discovered security vulnerabilities in your dependencies as issues on the repo: https://github.com/Swirrl/nvd-clojure-gh-action#2022-06-1709:11borkdudeSCI v0.3.30 (the 30th release!) Clojure/Script interpreter used in projects like #babashka, #jet, #clj-kondo, #4clojure, #clerk, #joyride, #nbb, #scittle etc. This release brings improvements in sci.async (async eval for CLJS), defrecord and adds some new API functions and types. https://github.com/babashka/sci/blob/master/CHANGELOG.md#v0330 Channel: #sci#2022-06-1712:22Ivar RefsdalI'm pleased to announce https://github.com/ivarref/double-trouble, a Datomic library for handling duplicate transactions more easily.#2022-06-2006:14bozhidarCompliment 0.3.13 is out with a bunch of improvements https://metaredux.com/posts/2022/06/20/compliment-0-3-13.html Enjoy!#2022-06-2015:34Benjamin@U04V15CAJ this would be sick on bb 😛#2022-06-2015:35borkdudeGive clojure-lsp a try too, it also provides completions in bb projects#2022-06-2011:28Dumchhttps://github.com/Liverm0r/DartClojure#api-with-npm-cli is now available with npm:
$ npm i -g dartclojure
$ dartclojure "Text('works')"
(m/Text "works")
Thanks to @pez for help 🙌
#2022-06-2011:43Carsten Behringhttps://clojars.org/scicloj/metamorph.ml (the core machine learning functionality of ) 0.6.2 is out. It adds the possibility to create ensembles of other pipelines / ML models. The usage is documented here: https://scicloj.github.io/scicloj.ml-tutorials/userguide-models.html (last chapter)#2022-06-2114:54athosPostmortem 0.5.1 is out! https://github.com/athos/Postmortem This release is a minor update that includes a fix for an override warning that occurs on Clojure 1.11.#2022-06-2118:35Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1149 is now available • clj -Ttools install-latest - change git tag sorting and version filtering to better find the "latest" released version of a tool. In general, typical semver numbering style A.B.C or on git vA.B.C will work best. Tags/versions containing "alpha", "beta", "milestone", "SNAPSHOT", etc will be filtered out. Docs not yet updated. • clj -Ttools install-latest - you can now omit all args to update all installed tools to the latest versions#2022-06-2118:55Jacob O'BryantI'm making the first public release of Platypub, a blogging + newsletter tool (sort of in the same wheelhouse as wordpress, ghost, substack etc). It's built with https://biffweb.com/, and the theme system uses Babashka by default for rendering websites and emails. It's still in quite an early state, but I'm releasing it now because one of the main purposes of building Platypub was so that there'd be an open-source, non-toy project that people can contribute to/read the source code of to help them learn Biff. Going forward I'm planning to encourage others to tackle some of https://github.com/jacobobryant/platypub/issues while I provide direction/code review/pair programming/etc. If that sounds like fun at all, come join the #biff channel! https://biffweb.com/p/announcing-platypub/ https://github.com/jacobobryant/platypub#2022-06-2208:50borkdudehttps://github.com/clj-kondo/clj-kondo, a linter for Clojure code that sparks joy v2022.06.22: • https://github.com/clj-kondo/clj-kondo/issues/1721: new :discouraged-namespace linter. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#discouraged-namespace. Thanks to the amazing @delaguardohttps://github.com/clj-kondo/clj-kondo/issues/1728 New macOS aarch64 (M1-compatible) binary (brew formula updated!) • https://github.com/clj-kondo/clj-kondo/issues/1726: fix invalid arity warning for sequence with map multi-arity transducer • https://github.com/clj-kondo/clj-kondo/issues/1715: fix false positive warning for recur not in tail position with core.async alt!!https://github.com/clj-kondo/clj-kondo/issues/1714: fix recur arity for defrecord, deftype and definterfacehttps://github.com/clj-kondo/clj-kondo/issues/1718: make unsorted namespaces linter case-insensitive • https://github.com/clj-kondo/clj-kondo/issues/1722: suppress redundant do in .cljc for just one language Channel: #clj-kondo#2022-06-2213:56seancorfield@U0NCTKEV8 will be pleased about a couple of those fixes! 🙂#2022-06-2214:29vlaaadInitial release of https://github.com/cljfx/flowless/ — a cljfx wrapper of efficient javafx virtual flow implementation that is similar to list view 🙂#2022-06-2215:02DumchDartClojure https://github.com/Liverm0r/DartClojure/releases/tag/0.2.7 micro release. Highlights: - updated global (core) vars, to avoid adding alias-prefix (follow up this https://github.com/Tensegritics/ClojureDart/pull/118); - use .- for fields; do now wrap with braces methods with no params (follow up this https://github.com/Tensegritics/ClojureDart/issues/116);#2022-06-2215:04seancorfieldWe encourage library maintainers to use #releases for small/frequent release announcements and to try to keep this channel #announcements for major releases, no more than about once per month.#2022-06-2215:05seancorfieldYou already posted a DartClojure release here two days ago.#2022-06-2218:39ericdalloclojure-lsp Released https://clojure-lsp.io/ 2022.06.22-14.09.50 with mainly fixes for consistency and become a even more reliable tool! Main highlights: We have a new linter 🎉 integrating with https://github.com/clj-depend/clj-depend, quite useful for projects with a ns stucture stanrdard that should be followed, kudos to @contato794 for the help! We fixed a bug introduced some releases ago where clojure-lsp could consider target/resources folders as source-paths making find-definition and other features go to those files Now, clean-ns move reader conditionals to top following other tools Finally, clojure-lsp should detect changes on files outside editor, like git branch changes, doesn't need to restart the LSP process anymore We now have Mac M1 native binary thanks to @borkdude’s help! Thanks for all contributors and sponsors which just help on making clojure-lsp a better tool each release! gratitude For more details, check #lsp#2022-06-2309:21victorbGood news everyone, Obsidian Wielder has now been included in the official list of community plugins in Obsidian! Wielder enables you to write Clojure code directly in Obsidian (powered by #sci [ thanks yet again @borkdude for this awesomeness ]), so you can do calculations, render React UIs (via Reagent), use DataView data and much more, directly in your page with full interactivity. Personally I write little mini-UIs inside my documents in Obsidian. I have one form for adding new TODOs for example, all done directly in my document with Wielder. Whatever you can program a webpage to do, or a Obsidian plugin, you could do directly in your document with Wielder. Installation instructions for people who want to give it a try can be found here: https://wielder.victor.earth/Tutorials/02-Installation I've also published the demo-vault as a Obsidian Publish website (which works with Wielder as well!), so you can see how it works a bit by just browsing the website too, introduction tutorial is here: https://wielder.victor.earth/Tutorials/01-Introduction#2022-06-2309:50borkdude@UEJ5FMR6K Amazing :) Feel free to link your project here: https://github.com/babashka/sci#projects-using-sci#2022-06-2309:55victorbGood idea 🙂 Patch sent! https://github.com/babashka/sci/pull/769#2022-06-2312:01steffan@UEJ5FMR6K I found a small typo in the link to https://github.com/victorb/obsidian-wielder on page https://wielder.victor.earth/Welcome victor should be victorb#2022-06-2315:22Colin P. HillThis is cool! Any thought to a #joyride-esque REPL sidebar?#2022-06-2406:55Ferdinand Beyer@UEJ5FMR6K — cool stuff! There’s a typo on your Welcome page, the Github link https://github.com/victorb/obsidian-wielder is missing the b in victorb and gives a 404#2022-06-2408:49victorbThanks @U2C6SPLDS and @U031CHTGX1T for spotting that, has been fixed now!#2022-06-2408:52victorb@U029J729MUP Thanks, I think so too! 🙂 I wasn't aware of Joyride (nvim user), but took a look at the GitHub repository. You mean the pane on the right side in the "Calva.Start.a.Joyride.REPL.and.Connect.-.Jack-in.mp4" video from the README or are you referring to something else? If that's what you're referring to, I currently see the entire Obsidian document as being that basically, except you can add normal text in-between the REPL evaluations#2022-06-2413:34Colin P. HillI'm just referring to the general idea of having a REPL for hacking on the program live. Trying to do side effectful things in codeblocks in a document might run into issues with code that isn't rerunnable.#2022-06-2413:36borkdudecc @U5H74UNSF ^ this is hinting at the "livedoc" idea too#2022-06-2416:21victorb@U029J729MUP thanks for clarifying further. I think having something to "hack on the program live" would break down the idea that the entire document should be re-runnable from the top, always. Basically, every time you change anything in the document, it tries to eval the entire document from top-to-bottom, a bit like how jupyter works. The way you would work on "the program" in Wielder would be to write down each instruction line-by-line, which leads you to arrive at the conclusion at the bottom. This already works today and is the core way I myself use Wielder.#2022-06-2811:42pfeodrippeThis is so good!! I'm a obsidian user and wanted something like https://github.com/JeremS/prose, this seems to solve the case \o/#2022-06-2815:02victorbI'm glad to hear @U5R6XUARE! 🙂 Let me know if you encounter any issues or have ideas for new features!#2022-06-2310:38ikitommi[metosin/malli "0.8.8"] is out! #malli is a data-driven data specification library for Clojure/Script. Relevant changed since 0.8.0: • Big improvements to ClojureScript development-time tooling, kudos to @danvingo • New guide for doing static type checking with malli + Typed Clojure • Fixes in clj-kondo mappings • Improved pretty printing with function instrumentation • Custom pretty printers via .pretty/prettier • Lot’s of small fixes, improvements and perf • New optional and unambiguous lite-syntax for simple cases
(require '[malli.experimental.lite :as l])

{:id string?
 :tags [:set keyword?]
 :address {:street string?
           :city string?
           :zip (l/optional int?)
           :lonlat [:tuple double? double?]}} 
Also, Malli has just passed 1000 s on github, big thanks to all contributors! https://github.com/metosin/malli/blob/master/CHANGELOG.md
#2022-06-2311:41ikitommibumped up version from 0.8.5 -> 0.8.8 due to deployment challenge. note to self: use github automation for releases#2022-06-2313:45joost-diepenmaatJust released
[nl.jomco/proof-specs "0.1.3"]
A tool to ensure your data specs are all able to generate. See https://git.sr.ht/~jomco/proof-specs
#2022-06-2409:08joost-diepenmaatAlso just released [nl.jomco/ring-openapi-validator "0.1.3"] Validates ring requests against openapi (swagger) specs. Includes middleware. See https://git.sr.ht/~jomco/ring-openapi-validator#2022-06-2409:08joost-diepenmaatCan also validate responses :-)#2022-06-2410:36borkdudeAnnouncing org.babashka/http-server {:mvn/version "0.1.4"} - an easy tool to serve static assets during development! Repo: https://github.com/babashka/http-server Use with Clojure: https://github.com/babashka/http-server#clojurehttps://t.co/7sn8XPc7Ga Use with babashka: https://github.com/babashka/http-server#babashkahttps://t.co/QUkaOhidlI Enjoy!#2022-06-2411:16borkdudeThanks to @U0522TWDA who made this https://gist.github.com/holyjak/36c6284c047ffb7573e8a34399de27d8 which was in turn based on https://github.com/babashka/babashka/blob/master/examples/image-viewer.clj babashka example. I used several variations of this in my own projects, which eventually became this repo.#2022-06-2411:16mkvlrA very nice, I was longing for this, glad you beat me to it!#2022-06-2411:17borkdudeIt was already sitting there for half a year, I just had to add some docs to it :)#2022-06-2411:36Jakub Holý (HolyJak)awesome! thank you!#2022-06-2412:17Tomas BrejlaI never really got into clj tools, but
$ clj -Ttools install io.github.babashka/http-server '{:git/tag "v0.1.3"}' :as serve
$ clj -Tserve exec
is it a good idea to use such an generic "alias" as serve when using the :as alias? If I understand it correctly, it's considered to become a tool name, so I'd expect something like bb-http-server or similar. And use it as clj -Tbb-http-server serve (instead of exec)..
#2022-06-2412:19Tomas BrejlaI mean upgrade attempt such as
clj -Ttools install-latest :tool serve
feels strange
clj -Ttools install-latest :tool bb-http-server
feels more reasonable to me.
#2022-06-2412:21borkdude@U01LFP3LA6P The alias is up to the user#2022-06-2412:35robert-stuttafordfyi @ULE3UT8Q5#2022-06-2413:23Ben Sless
Syntax error compiling at (babashka/cli.cljc:23:22).
Unable to resolve symbol: parse-double in this context
😞
#2022-06-2413:24Ben SlessShould at least specify it requires 1.11#2022-06-2413:25borkdudeWill fix that#2022-06-2413:27borkdudeTry 0.1.4 now#2022-06-2413:28borkdudeIt's funny because org.babashka/cli already depends on clojure 1.11, I would assume the clojure CLI to pull in at least that version.#2022-06-2413:28borkdude@UK0810AQ2 How were you "installing" it, as a clj tool, or so?#2022-06-2414:50Ben SlessAs a tool#2022-06-2414:52borkdude@UK0810AQ2 Can you try again using 0.1.4? If it persists, then I really don't know. Maybe the clojure version of your deps.edn is prioritized or you should update your clojure CLI? @U064X3EF3: halp... my clj tool depends on clojure 1.11, but somehow for Ben that's not working#2022-06-2414:54Alex Miller (Clojure team)if Clojure version is not not specified, you'll get the version from the root deps.edn in the Clojure CLI install, which matches the first part of the CLI version#2022-06-2414:55Alex Miller (Clojure team)what was you command Ben when you got that syntax error?#2022-06-2414:58borkdude@U064X3EF3 The tool does specify clojure version 1.11 https://github.com/babashka/http-server/blob/main/deps.edn#L1 and also one of its dependencies already did https://github.com/babashka/cli/blob/b6e0156ec79a4db2403673fd8aaa22278e012ea4/deps.edn#L1#2022-06-2414:59borkdudeI can also see 1.11 pop up here:
$ clj -Spath -Tserve
#2022-06-2415:01Alex Miller (Clojure team)well, I repeat my request for knowing the actual command that caused the error (and the CLI version there)#2022-06-2415:07Ben SlessI had a version set in my global deps edn and by bumping it was able to use 0.1.3#2022-06-2415:10Alex Miller (Clojure team)why do you have that at all?#2022-06-2415:16borkdudeOh, actually I have that too:
:deps {
        org.clojure/clojure {:mvn/version "1.11.0"}
        }
and I'm noticing that this 1.11.0 ends up on my classpath instead of 1.11.1. I had it because I wanted to use 1.11 by default and the clojure CLI didn't have that yet
#2022-06-2415:39borkdudeShouldn't dependencies of tools or in local deps.edn override what's in your global home deps.edn though?#2022-06-2416:13Alex Miller (Clojure team)No, top level (merged) overrides#2022-06-2416:17borkdudeaha#2022-06-2416:18borkdudebut if you have
{:deps {foo/bar v1}
 :aliases {:foo {:extra-deps {foo/bar v2}}}
then clj -A:foo pulls in v2 and not v1 right?
#2022-06-2416:26Alex Miller (Clojure team)These are two different parts of the process#2022-06-2416:28borkdudebut isn't -T treated as some kind of alias, conceptually?#2022-06-2416:28Alex Miller (Clojure team)Step 1 is to merge the deps.edn#2022-06-2416:30Alex Miller (Clojure team)Yes, -T is kind of treated as an an alias, but again, that's part of a later step#2022-06-2416:34borkdudeI still don't see why a -T clojure version wouldn't override the global home clojure version then#2022-06-2416:36Alex Miller (Clojure team)I'm going to take this to a thread in #tools-deps so we're not spamming here#2022-06-2606:57borkdude@UK0810AQ2 note that a global clj dep in user deps.edn is going to override the clj version for all projects#2022-06-2606:58borkdudeSee conv in other channel, just wanted to share the summary here#2022-06-2800:35DerekAnnouncing org.passen/malapropism. A small library for configuration data backed by malli https://github.com/dpassen/malapropism#2022-06-2821:48Luke JohnsonSuch a great name for this library!#2022-06-2806:43henryw374tiado-cljs2 , a new library that provides portable Shadow-cljs configurations (watches, release build etc) with Kaocha-cljs2 testing: https://github.com/henryw374/tiado-cljs2#2022-06-2811:20seriogaClojure adapter to jmustache library https://github.com/strojure/jmustache#2022-06-2813:55nottmeyHi, thanks for publishing your adapter. I’m just curious, whats the difference to https://github.com/fhd/clostache?#2022-06-2817:33seriogaHi @U3ZG4CAF8 Java implementations offer better performance than clostache https://github.com/serioga/clojure-benhcmarks/blob/master/src/clojure_benchmarks/mustache.clj. The https://github.com/spullara/mustache.java is fast and has adapter but behaves buggy in my use cases. Probably there are some feature differences between clostache and jmustache but I don't care. At the moment I'm not totally satisfied with mustache language and think about alternatives.#2022-06-2818:08nottmeyI see, thank you. And enjoy the nice weather in hamburg 😄#2022-06-2819:24Alex Miller (Clojure team)https://github.com/clojure/tools.build {:git/tag "v0.8.3" :git/sha "0d20256"} is now available • uber - https://clojure.atlassian.net/browse/TBUILD-32 - Preserve reader conditionals when merging data_readers.cljc • uber - https://clojure.atlassian.net/browse/TBUILD-33 - Adjust regex for data_readers to omit .cljs • Update to tools.deps.alpha 0.14.1212 #2022-06-2821:12seancorfieldhttps://github.com/seancorfield/build-clj io.github.seancorfield/build-clj {:git/tag "v0.8.3" :git/sha "7ac1f8d"} is available • Fixes handling of :exclusions in monorepo "lifted" basis calculation • Updates tools.build to v0.8.3 (follow-up in #tools-build)#2022-06-2913:27blueberryClojureCUDA 0.15.1 released. This release brings back compatibility with older Linux distros (such as ubuntu 20 etc.) https://clojurecuda.uncomplicate.org/#2022-06-2913:28blueberryNeanderthal 0.44.1 released. This release brings back compatibility with older Linux distros (such as ubuntu 20 etc.) https://neanderthal.uncomplicate.org/#2022-06-2913:48jpmonettasFlowStorm debugger 2.2.99 is out with new features FlowStorm is a Clojure and ClojureScript debugger. Last release (2.2.99) includes a bunch of new features, and fixes : • Browser now support instrumentation/uninstrumentation of vars and namespaces (single and multiple) • Instrumenting from the repl synchronize with the browser (for everything but #trace) • Added a context menu on locals to define vars from values • Added jump to first and last traces on thread controls (useful for exceptions debugging) • Added print-level and print-meta controls on pprint value panels • Improve re-run flow UX • Namespace instrumentation now accepts :verbose? to log known and unknown instrumentation errors details • Added flow-storm.api/uninstrument-forms-for-namespaces to undo instrument-form-for-namespaces instrumentation • Added #rtrace0 ... #rtrace5, like #rtrace but with different flow-ids • Added double clicking on flows functions window to execute show-function-calls If you have any questions or ideas, there is the #flow-storm slack channel now! Github repo : https://github.com/jpmonettas/flow-storm-debugger/ Cheers!#2022-06-2915:00Darrick WiebeThis is such an incredibly useful tool already.#2022-06-2915:48jpmonettasThanks @U01D37REZHP!#2022-06-2914:56blueberryDeep Diamond 0.23.1 released. https://github.com/uncomplicate/deep-diamond#2022-06-3008:02Ivar Refsdalhttps://github.com/ivarref/yoltq, an opinionated Datomic queue for building (more) reliable systems, is out with new features: • Added support for https://github.com/ivarref/yoltq#2022-06-22-v0256-diff. This requires that the function metadata contains the queue name. This makes it easier to jump directly from the producer to the consumer code. • Added support for https://github.com/ivarref/yoltq#retrying-jobs-in-the-repl. • Added unhealthy? function that returns true if there are queues in error. For the first 10 minutes it will return false so that if you include this in your application's health check, you can push new code and not have old failures stop your deploy. Yes, I was hit by this. ¯\(ツ)/¯ • Safer EDN reading and writing. Limitations and alternatives have also been documented. Yoltq supports retries, backoff, ordering and more. On-prem only. https://github.com/ivarref/yoltq#change-log.#2022-06-3014:42athoshttps://github.com/athos/trenchman 0.4.0 is out! Trenchman is a standalone nREPL/prepl client written in Go and heavily inspired by Grenchman. • Added support for the nrepl+unix scheme to allow connections via UNIX domain sockets (which is a new feature that nREPL 0.9 introduced) • Added a new option --debug to print messages sent between the client and server#2022-07-0107:08littleliCan I add it to scoop? #scoop#2022-06-3021:24Alex Miller (Clojure team)Clojure 1.12.0-alpha1 is now available https://clojure.org/news/2022/06/30/clojure1-12-alpha1#2022-06-3021:28Alex Miller (Clojure team)This release includes some changes to var interning as per the post. While we have thought of and tried many scenarios, it is hard to tell if we found them all. We really would appreciate you giving this a try early while you're developing and reloading etc to see if you encounter anything unexpected and drop us a question at https://ask.clojure.org if so.#2022-06-3022:12seancorfieldUpdating deps.edn at work to test it... 🙂#2022-06-3022:19eggsyntaxExciting!#2022-06-3022:22eggsyntaxAlex, would you say that this reflects a desire from the core team to shift toward smaller and more frequent new versions, or is that just how it happened to turn out this time?#2022-06-3022:27Alex Miller (Clojure team)We always desire smaller and more frequent versions, we’re just sometimes better at succeeding :)#2022-06-3022:45imreDoes CLJ-1872 mean (seq coll) is not going to be an idiom for (not (empty? coll)) going forward?#2022-06-3022:48seancorfield@U08BJGV6E The empty? docstring has been updated: "To check the emptiness of a seq, please use the idiom (seq x) rather than (not (empty? x))"#2022-07-0107:08borkdudeDoes this mean that clj-kondo should not warn on (not (empty? ...)) anymore unless it knows 100% sure the argument is a seq already?#2022-07-0108:28imreIt does sound like to me that going forward, (not (empty? coll)) should generally be preferred in cases where you don’t want to make any assumptions wrt what coll is#2022-07-0108:30borkdudeMaybe I'll just remove the linter then or disable it by default.#2022-07-0108:33imreDo note that I’m not on the core team (yet 😄) so I’m by no means a good source of information, I’m just speculating#2022-07-0108:49Eugenfeels like Christmas in July 🙂#2022-07-0111:57Alex Miller (Clojure team)Well this is an alpha1, so I wouldn't go run around changing anything yet#2022-07-0112:04Alex Miller (Clojure team)I think I'd flip that advice around and say that when you DO know you have something counted like a persistent coll, it is better to build a conditional on empty? than seq (esp if you are not doing anything else with seqs). If you are in a seq context, then keep using seq.#2022-07-0112:07Alex Miller (Clojure team)Generally I arrange the branches of the condition to not use not in either case if possible#2022-07-0112:42imreSo do I. I just find that there is a bit of an imbalance introduced here, with idiomatic (empty? x) being extended onto non-seq xes, but the so-far-idiomatic nonempty? check (seq x) isn’t. empty? is now generic across seqs and counteds but there isn’t a similarly generic counterpart I feel.#2022-07-0112:46borkdudeMaybe Clojure can have a (not-empty? ...) predicate which does the right thing for the right type.#2022-07-0112:46imreBackwards-compatibility isn’t affected as far as I can tell, but it might be surprising in new code that relies on empty? supporting counted colls that aren’t seqable#2022-07-0112:46Alex Miller (Clojure team)Well there’s not-empty #2022-07-0112:46borkdudeAnd then this debate can be over :)#2022-07-0112:46borkdudetrue#2022-07-0112:47Alex Miller (Clojure team)Maybe not-empty should be based on empty? #2022-07-0112:49Alex Miller (Clojure team)I think the difference is seqs have nil punning, other colls don't#2022-07-0112:49Alex Miller (Clojure team)So it's not symmetric#2022-07-0112:51imre#2022-07-0112:53Alex Miller (Clojure team)symmetry of what?#2022-07-0112:53Alex Miller (Clojure team)vote on what?#2022-07-0112:53Alex Miller (Clojure team)not sure what you're even advocating#2022-07-0112:53imreApologies Alex, I misread your reply. Allow me to clarify#2022-07-0113:00imreI think basing non-empty on empty? is a step in the right way. Note that it would still result in double negations in the seqable branch. Implementing a notempty? or not-empty? similarly to the new implementation of empty? could save that. Really what I’m looking for is the ‘one idiomatic way’ of checking both. Pre-1.12 that would be empty?/`seq`, from 1.12 it could be empty?/`x` where x is one specific function/macro and not a conditional expression.#2022-07-0409:14henrik
(defn populated?
  [coll]
  (boolean (not-empty coll)))
If not-empty works as intended, you could just coerce it to a boolean, right?
#2022-07-0409:15henrikI tried hard to come up with a word that didn't include not in the name. The internet suggests populated, occupied, and cherished 🙂#2022-07-0409:23borkdudeI think I prefer not-empty? ;)#2022-07-0409:35henrikCome on, what's wrong with cherished?#2022-07-0410:39henrikI'm disappointed in the English language here. We have "nothing", "something", and "everything", mapping to "empty", <go fish>, and "full".#2022-07-0410:44borkdudeWell, we have *, ? and + in regexes to denote 0 or more, 0 or 1 or 1 or more. So why not use: (+? coll) , that seems like an excellent choice to me... 😁#2022-07-0109:17tgkhttps://github.com/tgk/plait 0.0.1 is out. It is a wrapper around let which allows you to redeclare previous bindings and for those new declarations trickle through to the rest of your plait bindings. It is designed to making the declaration of repetitive test setup-code easier to write, read, and maintain - think rspec from Ruby but with less magic. We have used it at GoMore for a while now in our test code and are very happy with how it has allowed us to keep the test code shorter and easier to read.#2022-07-0109:48Geoffrey GaillardThis is an interesting idea. IIUC current implementation implies bindings are evaluated once per plait instance, right? Like:
(plait [a (do (prn "a evaluated") 1)
        b (inc a)]
  (plait [b (+ 2 a)])) ;; 3
;; Prints
;; "a evaluated"
;; "a evaluated"
#2022-07-0110:07tgkThis is correct! We haven't had the use case yet but you could even use it to trigger an extra evaluation by passing the empty vector (plait [] ...)#2022-07-0110:07tgkSo the strategy is very naive to avoid any surprises.#2022-07-0110:10chopmoAnother thing worth mentioning is that all bindings need to be declared at the top level. This to make the ordering explicit.#2022-07-0110:20Geoffrey GaillardDo you have the opposite use case? Eval bindings the minimum amount of times. Like statically tracking symbol usage to prune unused bindings and avoid binding repetition when an ancestor is shared:
(plait [a (do (prn "a evaluated") 1) ; a has 2 children
        b (prn "b shadowed " (inc a)) ; b is shadowed, no need to run (inc a)
        ]
  (plait [b (+ 2 a)]
    (prn "b " b) ; b must be evaluated here, so a must be too
    )
  (plait [b (+ 3 a)]
    (prn "b " b) ; b must be evaluated here, a is already evaluated
    ))
;; Prints
;; "a evaluated"
;; "b 3"
;; "b 4"


;;  (do (prn "a evaluated" 1)
;;   -----------------------
;;         |
;;         a
;;         |\
;;        /  \_
;;       /      \
;; (+ 2 a)  (+ 3 a)
;; ------   ------
;;    |       |
;;    b       b
;;    |        \
;;    |         |
;; (prn "b " b) (prn "b " b)
#2022-07-0110:45tgkAh no! That would be more in line with rspec from Ruby where a traversal of the directed acyclical graph means only the minimum code is called. We also experimented with this approach but were unable to get satisfactory let-style bindings without re-implementing let and therefore abandoned the approach. But it would be interesting to see! We experimented with prismatics fnk for that approach.#2022-07-0111:15borkdudeA #malli + #babashka co-announcement by @ikitommiand me 🎉 metosin/malli {:mvn/version "0.8.9"} - and #babashka 0.8.157 are now compatible. Both projects have had a new version released today to celebrate. This is how you can use malli in a babashka script:
(ns bb-malli
  (:require [babashka.deps :as deps]))

(deps/add-deps '{:deps {metosin/malli {:mvn/version "0.8.9"}}})

(require '[malli.core :as malli])

(prn (malli/validate [:map [:a [:int]]] {:a 1}))
More info here: https://github.com/metosin/malli#babashka
#2022-07-0111:18Adam HelinsThat's excellent news, congrats!#2022-07-0111:35ikitommiThanks @U04V15CAJ! Looking forward to seeing dev-tools/scripts built on top of this: schema inferrers, coercers, pretty printers etc.#2022-07-0112:06russmatneyVery excited about this! gratitude Thank you for the work and effort bringing these together!#2022-07-0115:16robert-stuttafordbrilliant!#2022-07-0117:47ClojaskUp until now, there is not any mutable heap (priority queue) data structure implemented using pure Clojure. We’re therefore excited to announce the release of https://github.com/clojure-finance/clojure-heap. We implemented every necessary API of a priority queue, including add, poll, peek, etc. Transient variables are used to boost the speed of clojure-heap. Unlike https://github.com/clojure/data.priority-map/ or java/priority-queue, you can store basically any Clojure type to clojure-heap without sacrificing much performance.#2022-07-0117:53Noah BogartNot released on clojars, but copy-paste a file into one's project?#2022-07-0117:53Noah BogartOtherwise, looks cool!#2022-07-0118:38hiredmanit doesn't really, it is using the transient as a mutable collection, bashing on it in place, which the docs specifically say not to do, and will not work on larger collections (transient operations may existing or return new values)#2022-07-0119:10Alex Miller (Clojure team)yeah, that's broken#2022-07-0203:21Clojask@hiredman Thank you for pointing this out. Actually in the pre-release, we did utilize the return value of the transient. However then in the optimization, we found that the return value and the input are the same, so we ignored all the return values. Sorry that we did not find this action is against the transient norms. We have reverted the version back to the “return value” one.#2022-07-0215:03emccue@U03JDCVV1MX I can set aside some time if you need help publishing to clojars or maven central. You would probably want to select unique coordinates other than clojure.heap and java.core for the namespaces. Also porting to deps.edn would allow you to have it available as a git dep#2022-07-0303:03Clojask@U3JH98J4R @UEENNMX0T Thank you for the kind suggestions. The project is on Clojars.#2022-07-0514:50avi> Also porting to deps.edn would allow you to have it available as a git dep FYI, libs like this can be used as a gitlib by overriding tools.deps manifest detection, like so:
com.github.gnarroway/hato {:git/tag "v0.8.2" :git/sha "e75c194" :deps/manifest :deps}
…explicitly specifying :deps/manifest as :deps triggers tools.deps to consider the lib a tools.deps lib. And it doesn’t mind that deps.edn doesn’t actually exist. Of course, if the lib has any dependencies, they’ll need to be also added to the project’s deps.edn and they won’t update automatically if you change versions (tags) so this works best for libs that have no deps or only a few deps.
#2022-07-1114:08MattMany thanks for the suggestions, much appreciated. We're looking into it.#2022-07-0121:22uochanJust released antq ver 1.8.847 Tool to point out your outdated dependencies. https://github.com/liquidz/antq Added progress bar to table reporter, and applied timeouts to some external operations.#2022-07-0203:21Clojask@hiredman Thank you for pointing this out. Actually in the pre-release, we did utilize the return value of the transient. However then in the optimization, we found that the return value and the input are the same, so we ignored all the return values. Sorry that we did not find this action is against the transient norms. We have reverted the version back to the “return value” one.#2022-07-0307:32simongrayNew release of https://github.com/simongray/datalinguist (0.2.171), the Clojure wrapper for Stanford CoreNLP. This release... • bumps the CoreNLP dependencies to 4.4.0 (the latest) • adds support for Tregex (grammatical constituency tree pattern matching) • adds support for TokensRegex (token-based pattern matching) • removes the ML contribution by Carsten Behring at his own request#2022-07-0408:22peterhGreat work, thanks for doing this! Having had no previous experience with NLP libraries, I was wondering why I couldn’t get your examples to work. Then I realized that I had to download CoreNLP first from https://stanfordnlp.github.io/CoreNLP/ and add stanford-corenlp-4.4.0/* to the classpath. Everything worked fine after that. Is this what you are supposed to do? It wasn’t mentioned in the readme, so I was wondering if I did something wrong here or if it is more obvious to people who have already worked with CoreNLP.#2022-07-0408:26simongrayHm… CoreNLP should be already added to the classpath if you’re using this as a library. However, you do need to download a language model to get most of the examples to work. This is mentioned in the README: https://github.com/simongray/datalinguist#language-models#2022-07-0408:28simongrayPerhaps I should make an example project to make this a bit clearer.#2022-07-0408:34peterhThis is strange, then maybe something with my setup wasn’t right. I have a minimal deps.edn that looks like this:
{:paths ["stanford-corenlp-4.4.0/*"]
 :deps {edu.stanford.nlp/stanford-corenlp$models-english {:mvn/version "4.4.0"}
        dk.simongray/datalinguist {:mvn/version "0.2.171"}}}
So I also had the language model already in there, but I had to add the path to get it to work. In my source file, I required [dk.simongray.datalinguist :refer :all] and recreated the example in your readme.
#2022-07-0408:35peterhYes, an example project could be very helpful I believe.#2022-07-0409:17simongrayHere you go: https://github.com/simongray/datalinguist-example This works for me using the Clojure CLI in IntelliJ/Cursive.#2022-07-0409:33peterhThanks for the example! You used edu.stanford.nlp/stanford-corenlp$models instead of specifying the language model like I did before and it seems like this was the problem. I wasn’t aware that I also need the models library without any language suffix, but now it works fine.#2022-07-0409:37simongrayIt's also confusing to me 😁 basically, most annotators need some data to work and in the case of English this data is not in a single place. Part of the motivation of this library is to make CoreNLP more accessible, since using it from Java is even more confusing IMO and requires some significant boilerplate.#2022-07-0409:40simongrayIf I could, I would just include all of the official language models in datalinguist, but that constitutes a multi-gigabyte dependency.#2022-07-0409:53peterhYeah, I wouldn’t even know where to start when using the library from Java. Maybe a little note in the “Language models” section of your readme would clarify that you also need the package without the suffix? Otherwise I think it is really easy to setup.#2022-07-0410:14simongrayI need to do a bunch of stuff, including rewriting the README and the examples 🙂#2022-07-0318:56Ivar RefsdalNew release of https://github.com/ivarref/double-trouble (0.1.96), a library to handle re-tried Datomic transactions and similar situations. This release adds: • A set-and-change function, :dt/sac, that cancels a transaction if a value does not change. • A just-increment-it function, :dt/jii, that increments the value of an attribute.#2022-07-0407:55borkdudeBebo - run Clojure Scripts on deno https://github.com/borkdude/bebo Channel: #bebo#2022-07-0414:22yoheikExcited to make the first announcement of Phrag: GraphQL API auto-created from an RDBMS connection for instant, flexible and customizable CRUD operations. Practicality in mind & performance checked. https://github.com/ykskb/phrag#2022-07-0414:54Ivandoes it come with (or is there any integration with) anything like a rules-engine to control data access? is there an auth component?#2022-07-0416:01yoheikPhrag itself does not include auth component, but it has a concept of https://github.com/ykskb/phrag/blob/main/docs/interceptor.md which allows injection of any additional logic per table and operation type. This https://github.com/ykskb/situated-sns-backend has access control implemented with identities from Firebase's ID token like https://github.com/ykskb/situated-sns-backend/blob/main/src/situated_sns/signal.clj#L67.#2022-07-1219:21Jakub Holý (HolyJak)Nice! Why is only Postgres (and sqlite) supported? The information_schema.query key_column_usage and constraint_column_usage tables are "standard" and should work on other RDBMS? BTW it would be nice if https://github.com/ykskb/phrag/blob/main/docs/mechanism.md linked to the other solutions mentioned and perhaps elaborated a little more on the differences. Where the other solutions too complicated? Too limited?#2022-07-1309:21yoheikIt's just that I haven't developed a DB adapter for other DBs yet. (That schema usage is specific to Postgres.) I'll probably work on MySQL adapter next, but if you have a demand for any specific DB, plz feel free to raise an issue 🙂 Regarding the feature/design comparison, I agree. I'll look into creating a comparison table between other projects when I get a chance.#2022-07-0415:49respatializedhttps://www.fabricate.site/ Introducing `fabricate` - generate static websites with the full power of Clojure at your disposal, from your project's REPL. Employ your abilities as a programmer for creative expression and automating boring tasks like listing every var in a namespace. Break the boundary between your programming language and your markup. Works best in emacs (for now). Experimental, but extremely fun to use. Use with caution, or with reckless abandon. Github repo: https://github.com/fabricate-site/fabricate Feedback/comments/criticisms very much welcome and appreciated. Release on Clojars coming soon.#2022-07-0510:06vemvInteresting! that "🔚" in a code snippet is confusing, i.e. is that syntax?#2022-07-1218:49Jakub Holý (HolyJak)Based on https://www.fabricate.site/tutorials/fabricate-for-docs.html > They start with the ✳️ emoji and end with the 🔚 emoji. the answer is yes#2022-07-1218:55Jakub Holý (HolyJak)For Extended form expressions, I wonder why not ✳( ...)🔚 instead, which I presume would make it easier to have an arbitrary level of nesting?#2022-07-0510:28Ashwin Bhaskarreleased a small utility tool that provides a simple interface to consume from Kafka - https://github.com/ashwinbhaskar/kafka-util#2022-07-0609:20Karol WójcikNew release of https://github.com/FieryCod/holy-lambda-ring-adapter featuring support for RestApi AWS Api Gateway integration.#2022-07-0615:13borkdudePod babashka buddy 0.2.0 - Use buddy from #babashka https://github.com/babashka/pod-babashka-buddy/releases/tag/v0.2.0 https://github.com/babashka/pod-registry/blob/master/examples/buddy.clj is an example how you can use it.#2022-07-0615:39borkdudeAny many thanks to @U015Y1A1N8Y and @U06FS3DLH!#2022-07-0700:54nnicholsFor those using GitHub Actions, I've recently made some updates: • nnichols/clojure-dependency-update-action https://github.com/nnichols/clojure-dependency-update-action. Pull requests generated by the action now link to a diff between the new and old versions. • nnichols/clojure-lint-action https://github.com/nnichols/clojure-lint-action. This fixed an issue where the running version of clj-kondo could fall out of date and the passing of some optional flags to reviewdog#2022-07-0709:20mpenetnew https://github.com/exoscale/interceptor release - adding utility fns to remove interceptors from stack/queue at execution time and related utilities#2022-07-1219:50Jakub Holý (HolyJak)I think there are some typos here > Sieparri also differs in a few way at the API level to accomodate the its usage goals perhaps should be > Sieparri also differs in a few way*s* at the API level to accom*m*odate the its usage goals ?#2022-07-0709:21mpenethttps://github.com/exoscale/coax bugfix release - preserve numeric types when coercing values via int? integer? etc#2022-07-0715:10Joshua SuskaloVersion 0.5.357 of coffi, the Clojure Foreign Function Interface backed by Project Panama is out, now with support for JDK 18! https://github.com/IGJoshua/coffi#2022-07-0718:00borkdudeA new version of #nbb - Scripting in Clojure on Node.js using SCI v0.6.122 Introducing a new https://github.com/babashka/nbb/tree/main/doc/bundle command which lets you package up your nbb project as a single standalone JS file. An example https://github.com/borkdude/nbb-action-example written with nbb which benefits from the bundle command.#2022-07-0814:21wilkerlucioPathom 3 version 2022.07.08-alpha is out! This release includes fixes and optimisations, the planner got a new optimization that affects specially the usage of placeholder nodes, getting the graph simplified (check https://github.com/wilkerlucio/pathom3/issues/146 for details). Changes: • Fix: Exceptions that occur inside p.a.eql/process in JVM won't include the entire stacktrace anymore. (issue #142) • Add ::p.error/error-data to datafied error object • Optimize nested AND branches on planner https://clojars.org/com.wsscode/pathom3#2022-07-0816:50Mark WardleThis looks like fantastic work @U066U8JQJ - looking forward to trying it out. Your software is powering a large study in multiple sclerosis in the UK across multiple sites, in order to assess the efficacy of high risk drugs in aggressive disease. So thank you. #2022-07-1113:13bruno.bonacciJust released μ/log v0.9.0 https://github.com/BrunoBonacci/mulog • It contains a few stability fixes for Elasticsearch data streams users, and more (thanks to @thomas559, @peder.refsnes) • and most importantly, I have switched the JSON module to use Chris Nuernberger's Charred fantastic library which doesn't depend on Jackson and it should avoid the library clash issues with other JSON providers For the full list of changes please see the CHANGELOG, if you have any questions feel free to write a message in the #mulog channel#2022-07-1114:00oliycarmine-streams 0.1.5 has just been released 🎉 • adds ability to remove consumers when they exceed a certain idle threshold #9 • bumps carmine dependency carmine-streams is a library that sits on top of carmine to provide a nicer api for working with redis streams https://github.com/oliyh/carmine-streams#2022-07-1206:42mariaWe've opened applications yesterday for our next funding round https://www.clojuriststogether.org/open-source/ 🎉 Applications are open for two weeks until July 25th. If you have any question, stop by in #cljtogether.#2022-07-1318:19jpmonettasFlowStorm debugger 2.2.114 is out, with a User Guide FlowStorm is a Clojure and ClojureScript debugger. Check out the new User Guide https://jpmonettas.github.io/flow-storm-debugger/user_guide.html Github repo : https://github.com/jpmonettas/flow-storm-debugger/ Cheers!#2022-07-1620:44Jakub Holý (HolyJak)Amazing work, thank you! Flow Storm has saved my day already couple of times 🙂#2022-07-1320:20blueberryClojure Sound 0.3.0 released! https://github.com/uncomplicate/clojure-sound#2022-07-1320:36imrehttps://github.com/imrekoszo/polylith-kaocha, the Kaocha-based test runner for Polylith got its https://github.com/imrekoszo/polylith-kaocha/releases/tag/v0.8.1 released: This release contains an important fix so clojure -M:poly test now properly returns a non-zero exit code when there are test failures. Details: https://github.com/imrekoszo/polylith-kaocha/releases/tag/v0.8.1#2022-07-1408:21kingmobAleph 0.5.0 is now available. It includes many bugfixes, and some speed improvements. Please give it a try! https://clojars.org/aleph/versions/0.5.0 Many thanks to our contributors: Arnaud Geiser, Moritz Heidkamp, Erik Assum, Ivar Refsdal, and Matthew Davidson (me) Changes: • Add initial clj-kondo hooks • Minor bugfix in examples code • Add pipeline-transform test • Add missing type hint in websocket-server-handler • Correctly handle too large headers/URIs • Add doc for undocumented response-executor parameter • Minor bugfix for keep-alive? false • Fixed major memory leak when sending InputStreams • Fixed bug when sending empty files • Fix returned filename in multipart uploads for clj-http parity • Ensure client exceptions handled and channel closed on invalid input • Fix minor bug with redirects and :method key • Fix bug in idle state timeouts • Disable misleading logs during tests • Switch to Netty’s FastThreadLocalThread for threads • Ensure wrap-future callbacks have thread bindings and a full classloader chain • Fix minor reflection warning in HttpContentCompressor ctor • Add missing direct dependency on Dirigiste#2022-07-1509:12bozhidarinf-clojure 3.2.0 is out with a few small improvements https://github.com/clojure-emacs/inf-clojure/releases/tag/v3.2.0 That's the first release in almost a year, so enjoy! Thanks to all contributors, sponsors and especially to Clojurists Together for their continued support of my Clojure OSS work! lambdalove#2022-07-1511:06borkdudeOpen sourced the code for my blog as a library. Announcing quickblog! Light-weight static blog engine for Clojure and babashka https://github.com/borkdude/quickblog See a demo of the live-reload feature https://twitter.com/borkdude/status/1547912740156583936#2022-07-1511:47DumchNew https://github.com/Liverm0r/DartClojure translator release https://github.com/Liverm0r/DartClojure/releases/tag/0.2.11 Compared to previous announced version: — Moved to dotted symbols for named parameters; — Fix bug with commas at the last map argument; — Fix await bug; — Fix bug with not being able to translate when 'return' is the first keyword;#2022-07-1811:17borkdudeClerk, Local-First Notebooks for Clojure, version 0.9.513 is out! New features: • 🌟 Valuehash ⚛️: treat clojure.core/deref expressions separately in the dependency graph and attempt to compute a hash at runtime based on the value of the expression. This lets Clerk see an updated value for these expressions without needing to opt out of Clerk's caching using ^:nextjournal.clerk/no-cache (#187). • ️ Expand indicators & allow option-click to expand all siblings. This adds an affordance to make it obvious that collections can be expanded. In addition, we support Option-Click to expand all sibling nodes on a level. • ️ Add nextjournal.clerk/eval-cljs-str that can be used to provide viewer :render-fns from other sources. Defining them in a separate .cljs file makes linting work on them. • 💫 Add docstrings for Clerk's public API in nextjournal.clerk. https://github.com/nextjournal/clerk/blob/main/CHANGELOG.md#09513-2022-07-18 Channel: #clerk On behalf of #nextjournal, enjoy!#2022-07-1813:28MarkoHi everyone, I wrote a blog post explaining the usage of the new :kit/htmx module that can be used to get started with the development of the https://htmx.org/ based applications with https://kit-clj.github.io/. You can check it out here: https://marko.euptera.com/posts/htmx-kit.html Cheers, Marko#2022-07-1814:56borkdude@U02T2S42SMD Congrats! #news-and-articles might be a better place for these sorts of posts :)#2022-07-1815:31Marko@U04V15CAJ you're right. I noticed that I posted to the wrong channel only after damage has already been done. Will be more careful in the future.#2022-07-1919:01bozhidarclojure-mode 5.15 is out https://github.com/clojure-emacs/clojure-mode/releases/tag/v5.15.0 Enjoy!#2022-07-1920:37Eugenhello everyone, @yogthos was kind enough to accept my contributions to 'migrate' https://github.com/yogthos/migratus to https://github.com/seancorfield/next-jdbc . Version 1.3.8 brings: • deps.edn file for git dependencies • next.jdbc migration - should be transparent for users • Fix documentation for passing Connection and DataSource • kaocha test runner support See changelog https://github.com/yogthos/migratus/blob/master/CHANGES.md . https://clojars.org/migratus/versions/1.3.8#2022-07-1922:22Eugenwe found an issue with the release - it does not work with DataSource / Connection yet. Passing a db-spec works fine. We'll work to fix this issue and make another release.#2022-07-2000:06vemvEither way, this is great news - kudos!#2022-07-2009:25oliyHi all, I'm pleased to announce the 0.2.0 release of re-graph re-graph is a GraphQL client for Clojure and ClojureScript with bindings for re-frame applications. https://github.com/oliyh/re-graph This is a major release of re-graph due to the API signatures changing. You are strongly advised to read the https://github.com/oliyh/re-graph/blob/master/UPGRADE.md guide for rationale and code examples. This release changes: • Nearly all API signatures, rationalising multiple positional args into a single map. The legacy API is retained, for the time being, at re-graph.core-deprecated https://github.com/oliyh/re-graph/issues/81 This release improves: • Documentation of options for authentication https://github.com/oliyh/re-graph/issues/80 • Error messages when re-frame is not initialised properly https://github.com/oliyh/re-graph/issues/86 #2022-07-2104:00Yehonathan SharvitThe final version of Data-Oriented Programming is out! https://clojurians.slack.com/archives/CD9UFQS93/p1658375836842569#2022-07-2105:26robert-stuttafordthis is a fantastic, seminal piece of work, @U0L91U7A8 . well done and thank you!#2022-07-2108:46littleliI've bought your book the other week unsure because it was in MEAP, but this is great news! Hungry to read it out during the evenings. 🍪 time!#2022-07-2114:19Yehonathan SharvitThank you @U0509NKGK!#2022-07-2115:02Daniel JompheCongrats! Quite curious about this book. Is there a writeup somewhere answering the question: how useful is this book to Clojure developers? Here we're all in the few months/years of experience with Clojure, coming from typical engineering backgrounds with e.g. Java / C#. Might we learn a lot from this book or should Clojure already have sufficiently nudged us towards these 4 principles by default?#2022-07-2115:54Yehonathan Sharvit@U0514DPR7 That’s a great question that I have been asking myself since I have published the first version of the book (with just a few chapters). I think you should ask on #data-oriented-programming#2022-07-2116:00Yehonathan Sharvit@U0514DPR7 By coincidence, someone gave an answer to this question on Twitter an hour ago (more or less at the same time you asked the question here) https://twitter.com/agile_geek/status/1550131632115294214?s=20&amp;t=3Xl59LmsWIevVF8-c5NlLQ#2022-07-2119:29Daniel JompheThanks a lot Yehonathan! I still asked the question, as you suggested, in #data-oriented-programming. For anyone interested in how people will answer it: https://clojurians.slack.com/archives/C01M07CTYRY/p1658431698639939#2022-07-2109:18jmayaalvAnnouncing Graffito: An idiomatic way to expose your Pathom 3 Graph as a Graphql Interface. • Expose your https://github.com/wilkerlucio/pathom3 graph to Clojurescript (using eql) or Javascript using Graphql • Uses https://github.com/walmartlabs/lacinia as Graphql engine backed by Pathom . • Support for: Graphql Queries and Mutations. • Sane conventions that reduce the boilerplate needed. • Todos: Subscriptions, Better Docs, Support for Graphql fragments, aliases and variables. https://github.com/jmayaalv/graffito/ Hoping that an announcement will bring more Pathom enthusiasts and help to Pathom reach to more developers.#2022-07-2121:07borkdudeBabashka CLI: turn Clojure functions into CLIs! v0.1.2 - v0.3.32 were released in the last (almost) two months with a large number of improvements. Special thanks to @cap10morgan for his contributions. Repo: https://github.com/babashka/cli API: https://github.com/babashka/cli/blob/main/API.md Changelog: https://github.com/babashka/cli/blob/main/CHANGELOG.md#2022-07-2122:08cap10morganThis is a great library that I had been writing in my head for awhile. But @U04V15CAJ beat me to coding it and (of course) did it better!#2022-07-2208:04bozhidar@alexyakushev just released clj-async-profiler 1.0! Read more about it here - http://clojure-goes-fast.com/blog/clj-async-profiler-100/#2022-07-2209:24Lukas Domagalayou have a broken link in the “A regex-based Replace…” paragraph to http://clojure-goes-fast.com/img/posts/html-flamegraph1.html#2022-07-2209:55vlaaadVery very very very very good!#2022-07-2215:11Lennart Buitclj-async-profiler is such a great tool!#2022-07-2223:12ericdalloc/c @U07M2C8TT#2022-07-2301:16jacob.maineThanks @UKFSJSM38 And especially thanks to @alexyakushev! 🙏 I love the :predefined-transforms. I think we’ll be able to use them in clojure-lsp’s profiling tools to collapse the time spent in rewrite-clj and clj-kondo—both of which contribute to most clojure-lsp flamegraphs, but which we can’t easily optimize from within clojure-lsp itself. Good stuff!#2022-07-2222:59uochanJust released merr ver 0.4.169, Minimal and good enough error handling library for Clojure(Script). https://github.com/liquidz/merr Added support for Babashka and nbb :)#2022-07-2409:37Ben SlessAnnouncing first releases for: io.github.bsless/tools.jvm {:mvn/version "0.0.15"} - small utilities for inspecting the current JVM process; Which args did I launch with? What's my PID? What are the current JVM's properties? Additionally, has a function for launching VisualVM and attaching it to the current process repository: https://github.com/bsless/tools.jvm API: https://github.com/bsless/tools.jvm/blob/master/API.md io.github.bsless/tools.jcmd.jfr {:mvn/version "0.0.3"} - Capture JFR recordings for the current JVM process or invoke as a tool repository: https://github.com/bsless/tools.jcmd.jfr API: https://github.com/bsless/tools.jcmd.jfr/blob/master/API.md#2022-07-2410:21p-himikHeh, a funny coincidence in naming with https://github.com/henryw374/tools.jvm#2022-07-2411:04Ben SlessI knew it existed, but the naming is too correct to pass. We use qualified naming anyway, so I hope Henry will forgive me#2022-07-2411:06Ben Slessbsless/tools.jvm previously existed as introspector but I am terrible at naming things so opted for the least creative name I could 🙃#2022-07-2609:35jumarAn interesting utility, thanks! I often have a need to get current pid in the REPL. I tend to use (-> (java.lang.ProcessHandle/current) .pid) but that's only for Java 9+. Does your lib require anything above Java 8?#2022-07-2609:40Ben SlessNot sure about visualvm, but everything else was tested on java 8 - 17 on windows, macos and linux#2022-07-2609:42jumarPerfect. Btw. I noticed that pid returns a string while the method I shared above returns long, which is more accurate and convenient I think. Possible to change that?#2022-07-2609:44Ben SlessPossible? Yes Should? Not sure. I get it as a string to begin with:
(defn pid
  "Get current JVM's PID as a string."
  []
  (-> (runtime-bean)
      .getName
      (str/split #"@")
      first))
#2022-07-2609:45Ben SlessI'd rather add another function that gets it as a Long#2022-07-2609:45Ben SlessAnd uses processhandle when possible#2022-07-2609:47jumarYeah, I know what your current implementation does right now. Just saying that you could coerce it because PIDs are numbers and also the canonical implementation (ProcessHandle) returns a number in later JDKs. But of course I have no problem if it stays the way it is 🙂#2022-07-2610:13Ben SlessI'll add another function, why not#2022-07-2410:49bortexzReleased a library for dependency graph computations, where computed values can be feeded into the next graph computation https://github.com/bortexz/graphcom#2022-07-2421:20ericdalloclojure-lsp Released https://clojure-lsp.io/ 2022.07.24-18.25.43 with focus on performance improvements! 🚀 There is a new experimental feature, which completely changes the way clojure-lsp analyze the project's code, not scanning the whole project after startup but only the current namespace and its dependencies, building and maintaining a dependency-graph, this feature should improve performance drastically, especially for huge projects with lots of files like metabase. For people interested, please help with tests and feedbacks enabling it via {:experimental {:dep-graph-queries true}} in your .lsp/config.edn. (Details about the performance improvement https://github.com/clojure-lsp/clojure-lsp/pull/1053#issue-1272865476.) Besides that, we had many minor performance improvements and even new refactorings! Kudos to @jacob.maine for the huge help during this release! 👏 Thank you for all sponsors and contributors! 💜 For more information, check #lsp#2022-07-2423:12Luke JohnsonThanks for all your continued updates! Your hard work makes my life so much easier! 🙂 That said, I think there’s a problem between the latest version of clojure-lsp and Calva on VS Code. I started a https://clojurians.slack.com/archives/CBE668G4R/p1658703936033779#2022-07-2423:13Luke JohnsonOkay. This was already fixed by @UKFSJSM38! Thanks so much! Amazing work!#2022-07-2504:27Yehonathan SharvitThe print version of “Data-Oriented Programming” is out! he book is available at https://manning.com. Discount code: sharvit39#2022-07-2505:44IvanCongrats!#2022-07-2521:32mkvlrCongratulations @U0L91U7A8!#2022-07-2812:54Jason M JonesCongratulations, a really great book that has opened my mind to lot of new possibilities!#2022-07-2815:25Yehonathan SharvitWhat kind of possibilities @U0132EKGZFB?#2022-07-2815:42Jason M JonesThanks for asking @U0L91U7A8. Well, for one, the possibilities of changes without so much maintenance, and even the possibility to change some code at all (which becomes very challenging when you have objects and fields at multiple layers). I have been exploring Clojure, and was drawn by its simplicity and the philosophy of having a few data structures, and many functions to operate on those, instead of the inverse with objects. It occurred to me that since most of our data comes in, receives some transformation, is stored in another format, what is the point of having all these intermediate objects with all these fields, they are a huge burden. With Clojure, it is so much easier to work with the more generic data and transform it. Your book was a great bridge between Clojure, which I see as ideal for this, and the multitude of languages our software is written in, which will not be able to be ported to Clojure soon, if ever. Your book put much more definition to my intuitions, and much more defined concepts. , I can start slowly incorporating the ideas of Data Oriented Programming, and with new projects begin with it. So thank you for sharing all of this. I plan to share your book with my team members and other software engineers. I hope that the industry will see the value of your thoughts, and start to incorporate them more, I know I will be.
#2022-07-2815:48Yehonathan SharvitWow! I’m so glad you enjoy the book both from an intellectual and a pragmatic perspective.#2022-07-2815:53Jason M JonesI certainly did!#2022-07-2521:24sudakatuxJust Released version 0.2.0 of the conductor-sdk. Some interesting features of this version: - 100% Written in Clojure. No mora java inter-op - Compatible with GraalVM you can create workers that don't require the JVM - Contains Utils to treat Conductor Tree structures as data map/filter workflow tasks. Netflix Conductor is an open source workflow orchestration platform. Used by top companies to simplify microservice integrations, and connect your Clojure microservices together (even to services written in other languages). Learn more about Conductor https://orkes.io/what-is-conductor/ We have built the Clojure SDK to make it easy to integrate your Clojure microservices into Conductor, and create workflows and tasks as code. Try Conductor at http://play.orkes.io https://clojars.org/io.orkes/conductor-clojure#2022-07-2911:30borkdudeBabashka 0.9.160 is released. It now comes with #babashka-cli integration, described in this blog post: https://blog.michielborkent.nl/babashka-tasks-meets-babashka-cli.html Full changelog: • https://github.com/babashka/babashka/issues/1324: -x to invoke a function with babashka CLI • https://github.com/babashka/babashka/issues/1324: babashka.tasks/exec to invoke a function with babashka CLI in tasks • SCI: don't eval metatada on defn body • SCI issue 774: make interpreter stacktrace available to user • babashka.process: improve tokenize • Upgrade to GraalVM 22.2.0 (#1325) Enjoy! babashka#2022-07-2915:41Michaël SalihiJuste released Inertia-clojure 0.2.5. Clojure Middleware adapter for https://inertiajs.com/ to build single-page apps, without building an API. https://github.com/prestancedesign/inertia-clojure Changelog: • Feature ◦ Keep http status code from response (fixes https://github.com/prestancedesign/inertia-clojure/issues/4) • Changed ◦ Switch to tools.build ◦ Upgrade to Clojure 1.11.1 ◦ Upgrade to Ring 1.9.5 ◦ Upgrade to Jsonista 0.3.6#2022-07-2923:35seancorfieldhttps://github.com/seancorfield/next-jdbc -- com.github.seancorfield/next.jdbc {:mvn/version "1.2.790"} -- A modern low-level Clojure wrapper for JDBC-based access to databases. • Address https://github.com/seancorfield/next-jdbc/issues/207 by supporting "db-spec" hash maps containing :datasource or :connection-uri (this is otherwise undocumented and intended to aid migration from clojure.java.jdbc). • Address https://github.com/seancorfield/next-jdbc/issues/199 by adding notes on UTC usage -- https://github.com/denismccarthykerry. • Enhance insert-multi! to accept a sequence of hash maps and also to support batch execution, via PR https://github.com/seancorfield/next-jdbc/pull/206 -- https://github.com/rschmukler. • Fix HikariCP pooling example. Follow-up in #sql#2022-07-3002:42seancorfieldhttps://github.com/seancorfield/honeysql -- com.github.seancorfield/honeysql {:mvn/version "2.3.911"} -- Turn Clojure data structures into SQL. • Address https://github.com/seancorfield/honeysql/issues/418 by documenting a potential "gotcha" with multi-column IN expressions (a change from HoneySQL 1.x). • Fix https://github.com/seancorfield/honeysql/issues/416 via PR https://github.com/seancorfield/honeysql/issues/417 from https://github.com/corasaurus-hex -- using the internal default state for the integrity assertion. • Address https://github.com/seancorfield/honeysql/issues/414 by providing an example of ORDER BY with a CASE expression. • Address https://github.com/seancorfield/honeysql/issues/412 by documenting options in a separate page and reorganizing the ToC structure. • Address https://github.com/seancorfield/honeysql/issues/409 by making docstring check for public helpers conditional. • Fix https://github.com/seancorfield/honeysql/issues/406 by adding :alter-column (which produces MODIFY COLUMN when the MySQL dialect is selected) and deprecating :modify-column. • Address https://github.com/seancorfield/honeysql/issues/401 by adding register-dialect! and get-dialect, and also making add-clause-before, strop, and upper-case public so that new dialects are easier to construct. Follow-up in #honeysql#2022-07-3021:43johnPleased to announce the first release of net.clojars.john/inmesh {:mvn/version "0.1.0-alpha.1"} - "One step closer to threads on the web" - https://github.com/johnmn3/inmesh It's a simplified rewrite of tau.alpha and introduces spawn, in and future to Clojurescript. It has a simple form of implicit binding conveyance as well as explicit binding conveyance. For now, you have to declare some configuration details in an ns loaded by the screen/main thread. By the beta releases though, I'd like to provide some automation so that you only need to declare configurations for advanced scenarios. More details on configuration are in the repo. spawn - provides a .thread-like facility for spawning webworkers, either ephemeral or long-lived. (can take a half-second of overhead, depending on loaded libs) in - provides a way to invoke work on a spawned webworker. Multiple workers can be spawned and then you can nest ins so as to easily construct execution flows. (usually takes 4 or 5 milliseconds of overhead for small invocations in compile mode :none) future - backed by a pool of webworkers, provides a way to invoke work off the current thread, without having to spawn or specify a worker (usually takes 8 to 10 milliseconds of overhead for small invocations in compile mode :none) All three provide simple binding conveyance, derefability in workers, promise/thening in the screen thread and allowing for yielding in async scenarios. Also comes with a wrapping for js/IndexedDB, providing a synchronous db-get call, similar to the synchronous API of js/localstorage. Provides a standard https://johnmn3.github.io/inmesh/ built on re-frame/mui-v5/comp.el/sync-IndexedDB, with application logic (reg-subs & reg-event functions) moved into a webworker, where only react rendering is handled on the screen thread, allowing for buttery-smooth components backed by large data transformations in the workers. Also provides an auto-transducifying, auto-parallelizing =>> macro, ala https://github.com/johnmn3/injest that fans work across a worker pool, roughly doubling the speed of large transformations in Chrome and Safari and tripling it in Firefox.
(defn flip [n]
  (apply comp (take n (cycle [inc inc dec]))))

(=>> (range)
     (map (flip 100))
     (map (flip 100))
     (map (flip 100))
     (take 1000000)
     (apply +))
Those maps will be combined into a single transducer and then 512 element chunks will be lazily consumed and fanned across a worker pool, sequenceing the chunks through the transducer and then recombining the results on the calling thread. Returns a promise in the main thread. Caveats: work is serialized across threads. But, as shown with =>>, you can make up for that by smartly chunking your work across a threadpool for nontrivial work loads. Issues and PRs are welcome. It's a pretty early alpha and the APIs are subject to change. Might provide a pmap before the beta. Happy hacking!
#2022-08-0218:58metasoarousOMMFG; Fantastic work! I've been dreaming about this for ages. Well done!#2022-08-0219:44johnThank you sir! Looking forward to hydrating oz charts with various data transformations off main thread now!#2022-08-0221:37metasoarousStop reading my mind! 😉#2022-07-3111:13borkdude#babashka-neil v0.1.36 is out! Featuring @seancorfield’s deps-new behind the neil new command. Also added neil add nrepl for adding an nrepl alias. An easy way to set up your Clojure project:
neil new --name foobar
cd foobar

neil add nrepl
clojure -M:nrepl

neil add test
clojure -M:test

neil add build
clojure -T:build uber
#2022-07-3111:13borkdudeThanks to @U0CLCL6T0 who added both new features#2022-07-3111:42teodorluWow, nice! Does this incur JVM startup time?#2022-07-3111:43borkdudeDo you mean new ? Nope, it runs in bb :)#2022-07-3116:44djanusI’ve released version 0.3.1 of https://github.com/nathell/skyscraper, a framework for structurally scraping whole sites in Clojure. Get it from Clojars: {skyscraper/skyscraper {:mvn/version "0.3.1"}} Changes in this release: • Backwards-incompatible API changes: ◦ parse-fn is now expected to take three arguments, the third being the context. The aim of this change is to support cases where the HTML is known to be malformed and needs context-aware preprocessing before parsing. Built-in parse-fns have been updated to take the additional argument. ◦ Cache backends are now expected to implement java.io.Closeable in addition to CacheBackend. Built-in backends have been updated to include no-op close methods. • Optimization: Skyscraper no longer generates indexes for columns marked with :skyscraper.db/key-columns when creating the DB from scratch. There is also a new option, :ignore-db-keys, to force this at all times. • Skyscraper now retries downloads upon encountering a timeout. • Bug fixes: ◦ Fixed dev/scrape misbehaving when redefining processors while scraping is suspended. ◦ Fixed scrape mishandling errors with :download-mode set to :sync. ◦ Fixed an off-by-one bug in handling :retries. ◦ Retry counts are now correctly reset on successful download. The Closeable change is prompted by a new, experimental backend that stores cached pages zstd-compressed in RocksDB. It’s not yet available in Clojars (use deps.edn’s git deps facility), but you can preview it here: https://github.com/nathell/skyscraper-cache-rocksdb. As always, happy scraping!#2022-07-3117:52Eugenmigratus 1.4.0 is out - as a tool to do data migrations for SQL databases and more, thanks @yogthos for the release: • new feature: Run basic tests against PostgreSQL using testcontainers • new feature: Circle CI matrix runner - run against multiple clojure and jdk versions • new feature: Circle CI junit reports, run tests with kaocha • bug fix: https://github.com/yogthos/migratus/issues/181 • enhancement: https://github.com/yogthos/migratus/issues/221 https://github.com/yogthos/migratus/blob/master/CHANGES.md#2022-07-3121:51Michaël Salihihttps://github.com/prestancedesign/usermanager-reitit-example - A little demo web app in Clojure, using Integrant, Ring, Reitit, Selmer (and a database). • Now has build.clj and uses tools.build to build an uberjar#2022-08-0109:36olttwaPresenting https://github.com/nilenso/goose • Features: Scheduling, Error Handling & Retries, API to manage Jobs • Documentation: https://github.com/nilenso/goose/wiki • Uses Redis as a Queue Broker, with RabbitMQ planned for 0.3 Goose Client
(ns my-app
  (:require [goose.client :as c]))

(defn my-fn
  [arg1 arg2]
  (println "my-fn called with" arg1 arg2))

; Supply a fully-qualified function symbol for enqueuing.
; Args to perform-async are variadic.
(c/perform-async c/default-opts `my-fn "foo" :bar)
(c/perform-in-sec c/default-opts 300 `my-fn "foo" :bar)
Goose Worker
(ns my-worker
  (:require [goose.worker :as w]))

; my-app namespace should be resolvable.
(let [worker (w/start w/default-opts)]
  ; ... listen for SIGINT or SIGTERM ...
  (w/stop worker))
Reach out on #goose if you need any help!
#2022-08-0113:55blueberryNew releases of Neanderthal (0.45.0), Deep Diamond (0.25.0), and ClojureCUDA (0.16.0) now support the latest CUDA 11.7 GPU computing platform. Plase check out clojars, or https://neanderthal.uncomplicate.org/ https://clojurecuda.uncomplicate.org/ https://github.com/uncomplicate/deep-diamond#2022-08-0114:28imrehttps://github.com/cgrand/xforms/releases/tag/v0.19.3 is out with babashka support and several fixes#2022-08-0114:28borkdudewelcome to add to https://babashka.org/toolbox/ :)#2022-08-0114:31Noah Bogartlooks like you got write access to the library! nicely done#2022-08-0114:47imreWith great power comes great responsibility. I understand Chris has other priorities lately, and I’m thankful to him for inviting me to publish this. A true gent!#2022-08-0115:04rickmoynihanAwesome news; this is a great library#2022-08-0211:40imreThanks to Chris this is now out on clojars as well#2022-08-0116:37Alex Miller (Clojure team)Save the date: the next Clojure/conj will be Apr 27-28, 2023 in Durham, NC! CFP will probably be in Dec/Jan timeframe.#2022-08-0120:06Jakub Holý (HolyJak)I'm happy to announce the alpha release of https://github.com/holyjak/fulcro-rad-asami , a #fulcro Rapid Application Development plugin enabling the use of #asami as the storage database. Asami is a graph database for Clojure and ClojureScript that is used either in memory or persisted to a disk. There is a demo application using it here https://github.com/fulcrologic/fulcro-rad-demo#running-an-asami-based-server-alpha-quality#2022-08-0211:14borkdudeEarly announcement of cherry, a .cljs to .mjs (ES6 module) compiler. https://github.com/borkdude/cherry 🍒 The overall goal is to have something that works together well with the JS frameworks du jour: do some of the work in JS, and do some of the work in CLJS without much friction. The compiler runs in JavaScript (currently Node.js, but browser would also be possible), is small and fast, and can be ran on a file-by-file basis: 1 CLJS namespace = 1 ES6 module. See the cherry https://github.com/borkdude/cherry#cherry-cherries for more details. This project is experimental and looking for feedback: it is not production ready. With your feedback and testing on non-critical projects, cherry could become something production ready sooner or later. There are isolated things to work on like figuring out how to get the cljs.core module compatible with ES6 treeshaking. Your input is welcome! Channel: #cherry#2022-08-0211:23Cora (she/her)amazing :star-struck: #2022-08-0215:17richiardiandreaThis is very nice, I think I'll try it out against Cloudflare...`shadow-cljs` works well but cherry seems very cool 😄#2022-08-0215:19borkdude@U0C8489U6 let me know how that goes :)#2022-08-0215:21richiardiandreawill do!#2022-08-0217:13respatializedHopefully this helps people sneak cljs into js shops as easily as clj could be snuck into jvm shops 🙏 https://www.youtube.com/watch?v=TgsTmIxAtxY#2022-08-0217:38roklenarcicwhat is the motivation here? Why would someone use this over shadow-cljs? i.o.w. what problem are you solving?#2022-08-0217:40borkdude@U66G3SGP5 Have you read the README?#2022-08-0217:43roklenarcicInteresting… so the idea is that it compiles .cljs but it is not the usual CLJS (with its goog closure dependency) but it is another thing entirely.#2022-08-0219:09Darrick WiebeJust looking at the commit history, I love that in 2 weeks you resurrected a project that hasn't had a commit in 11 years and put out a release! Does this project predate clojurescript??#2022-08-0219:42Cora (she/her)first clojurescript release was march 7, 2015, according to github#2022-08-0315:42joseI'm releasing clj-nix 0.3.0 There are 2 new helper functions: • mkBabashka: Builds babashka with custom features (like sqlite) • bbTasksFromFile: Helper to wrap the Clojure functions in a file as bash scripts. Useful to create nix shells with custom commands. Full changelog: https://github.com/jlesquembre/clj-nix/blob/0.3.0/CHANGELOG.md Docs: https://github.com/jlesquembre/clj-nix#2022-08-0315:45borkdudeAwesome. Feel free to PR here too: https://github.com/babashka/toolbox#2022-08-0315:53borkdudeclj-kondo 2022.08.03! clj-kondo https://github.com/clj-kondo/clj-kondo/issues/1755: Fix false positive invalid-arity when using mapcat transducer in sequence with multiple collections • https://github.com/clj-kondo/clj-kondo/issues/1749: expose clojure.pprint/pprint to the hooks API • https://github.com/clj-kondo/clj-kondo/issues/698: output rule name with new output option :show-rule-name-in-message true. See example in https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#show-rule-name-in-message. • https://github.com/clj-kondo/clj-kondo/issues/1735 Add support for nilable map type specs • https://github.com/clj-kondo/clj-kondo/issues/1744 Expose :imported-ns in analysis of vars imported by potemkin • https://github.com/clj-kondo/clj-kondo/issues/1746 Printing deps.edn error to stdout • https://github.com/clj-kondo/clj-kondo/issues/1716 Include dispatch-val in analysis of defmethod • https://github.com/clj-kondo/clj-kondo/issues/1760 Add :arglist-strs support for functions defined with fn • https://github.com/clj-kondo/clj-kondo/issues/1731: prioritize special form in name resolving • https://github.com/clj-kondo/clj-kondo/issues/1739: Namespaced map type check fix • Fix https://github.com/clj-kondo/clj-kondo/issues/1737: config-in-ns for specific namespace + ns-group override • Fix https://github.com/clj-kondo/clj-kondo/issues/1741: Ignore redundant-call when single call is made in .cljc #2022-08-0417:45ChaseQuick question, I use clj-kondo through clojure-lsp (unless I'm mistaken haha) so do I actually need to keep upgrading clj-kondo or can I just stick to upgrading clojure-lsp? Is the lsp relying on the version I have installed or does it come with it packaged?#2022-08-0417:47borkdude@U9J50BY4C clojure-lsp will upgrade eventually to this version, so if you're not using clj-kondo outside of your editor, there is no need to upgrade#2022-08-0417:43djanusAfter releasing https://github.com/nathell/skyscraper 0.3.1 a few days ago, I set out to write a little showcase for it, and uncovered several bugs in the less-well-trodden parts of the code. So let me introduce you to Skyscraper 0.3.2: • Fix: Skyscraper no longer throws exceptions when using processed-cache and some of the processors don’t have :cache-template. • Fix: Skyscraper no longer throws exceptions when the server returns multiple Content-Type headers. • Fix: Processed cache no longer garbles non-ASCII strings on macOS. And here’s the showcase I mentioned: https://danieljanus.pl/autosummarized-hn/ (https://github.com/nathell/summhn). Some GPT-3 included!#2022-08-0420:33lreadhttps://github.com/clj-commons/etaoin The 38th release of Etaoin, but the first under the loving care of clj-commons! Much thanks to @igrishaev for creating Etaoin and now entrusting it to our care. A big thanks to @borkdude for all his moral, intellectual and borkcellent support. Highlights from the https://github.com/clj-commons/etaoin/blob/master/CHANGELOG.adoc#v1038-minor-breaking: • We are now Babashka compatible! • Lint support augmented with a clj-kondo config! • Docs and docstrings reviewed, reorganized, cljdoc-ified, and updated (with thanks for new tips and usages from @jkrasnay and @raimonster!) • Various bugs squashed • Automated test coverage now also includes Windows and macOS • An Etaoin logo from @igrishaev (thank you for this parting gift Ivan!) • Support for connecting to a remote WebDriver (thanks @verma & @mjmeintjes!) Drop by #etaoin with any questions!#2022-08-0420:51borkdudeCongrats on this milestone!#2022-08-0422:31lreadThanks! And thanks for all your support!#2022-08-0423:42djanusThanks Ivan and Lee!#2022-08-0519:17Alex Miller (Clojure team)https://clojure.org/releases/tools#v1.11.1.1155 is now available • https://clojure.atlassian.net/browse/TDEPS-228 Add support for auto inferred Sourcehut git urls (`http://ht.sr.user/project` => ) • Update aws-api, Maven, etc dep versions#2022-08-0821:05jmvHi all! Sharing the initial public release of https://github.com/nytimes/querqy-clj. This is a library for rewriting a user's search queries improve search relevance. See the https://cljdoc.org/d/com.nytimes/querqy-clj/0.7.0/doc/intro for a small motivating example.#2022-08-0821:58lilactownAnnouncing https://github.com/lilactown/eql-cli, a command line interface for executing EQL queries on EDN data. Powered by #pyramid and #babashka. babashka#2022-08-1107:46jamesVery nice, is there a preferred channel for eql-cli?#2022-08-1114:19lilactown#pyramid is fine for now#2022-08-0922:26jacob.mainehttps://github.com/clojure-lsp/lsp4clj vhttps://clojars.org/com.github.clojure-lsp/lsp4clj/versions/1.0.0 lsp4clj is a suite of tools for implementing a Language Server Protocol (LSP) server in Clojure. It underpins https://github.com/clojure-lsp/clojure-lsp. Prior to this release, lsp4clj was primarily a wrapper for lsp4j, a Java library for building LSP servers. This release removes our dependency on lsp4j. We now have a complete LSP implementation in Clojure. By removing lsp4j we’ve reduced the amount of reflection, making the Graal build more reliable, removed a ton of coercion to and from Java objects, and removed several transitive dependencies including xtend, gson and guava. We’ve also made it easier for servers built with lsp4clj to choose which parts of the LSP spec they want to implement, stay up-to-date with the spec, and manage concurrency with their preferred tools. Follow up in #lsp#2022-08-1110:35dominicmExciting stuff. I might have to finally implement my lsp server 😜#2022-08-1409:45niquolaAwesome, we discussed it - but were lazy to start!#2022-08-1007:47tengstrandJust released https://github.com/polyfy/polylith/releases/tag/v0.2.15-alpha: • https://github.com/imrekoszo/polylith-kaocha test runner - https://github.com/polyfy/polylith/pull/196 • XDG support - https://github.com/polyfy/polylith/pull/228 • Support for multiple source directories - https://github.com/polyfy/polylith/issues/206 • And more…#2022-08-1010:08EugenSo many improvements. Great work! I like poly is using XDG directories - a ton of improvements. Will update to it out now and give feedback.#2022-08-1010:10tengstrandGreat!#2022-08-1121:08Eugenwe upgraded and so far so good. I will implement tests via polylith soon 🤞#2022-08-1012:34jpmonettasFlowStorm Clojure and ClojureScript debugger 2.3.131 is out FlowStorm is a Clojure and ClojureScript debugger with some unique features. 2.3.131 includes new features : - New lazy and recursive value inspector (https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_value_inspector) - New tap tool to work with tap> (https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_taps_tool) - Support for light and dark themes, in selected or automatic mode. Checkout the user guide for more info. (thanks to Liverm0r!) - Thread tabs can be closed and reordered - New functions for shutting down the debugger gracefully (for using in state components) and a bunch of bug fixes. Github repo : https://github.com/jpmonettas/flow-storm-debugger/ User Guide https://jpmonettas.github.io/flow-storm-debugger/user_guide.html Show up in #flow-storm if you are interested in this kind of stuff. Cheers!#2022-08-1013:44vemvInteresting! It would help me (and likely other would-be users) to have an intro paragraph in the github explaining the what/why of the project i.e. I see that it's a debugger, why should I pick yours? (nowadays I don't use a debugger at all tbh, open to going back to them)#2022-08-1013:50jpmonettashi @U45T93RA6, sure, good idea. I gave a talk reacently that goes over exactly that question, the slide is here: https://youtu.be/A3AzlqNwUXc?t=102#2022-08-1017:21jpmonettas@U45T93RA6 someone else was asking the same on redit, so there is also my answer there https://www.reddit.com/r/Clojure/comments/wkw8qr/comment/ijqq8a4/?utm_source=share&amp;utm_medium=web2x&amp;context=3#2022-08-1113:15vemvgreat read, thank you!#2022-08-1114:59Kelvinhttps://github.com/yetanalytics/flint has just been released. From the changelog: • Rework IRI, variable, blank node and literal implementations and add support for additional Java(Script) types. ◦ Implement protocols to define validation and formatting behavior IRIs, variables, blank nodes and literals, and apply extend-type/`extend-protocol` to default types. ◦ Add support for java.net.URI and js/URL IRI instances. ◦ Add support for java.time.Temporal timestamps (e.g. LocalDateTime and ZonedDateTime). ◦ Refine datatypes for numeric literals, e.g. Clojure integers are associated with xsd:long by default. ◦ Refine datatypes for date- and time-only timestamps, e.g. java.sql.Date and java.sql.Time are now associated with xsd:date and xsd:time, respectively. (Breaking!) • Add :force-iris? optional arg in order to force datatype IRIs to be appended when formatting literals (with the exception of language-tagged strings). • Add support for Unicode characters and percent encoding. ◦ Unicode characters are now supported in symbols and keywords. ◦ Percent encoding is allowed in prefixed IRI keyword names. ◦ (Clojure-only) Optimize string validation. • Replace certain uses of s/or with multi-specs in order to simplify error messages.#2022-08-1116:37rickmoynihan🎉 Congratulations on this release… I’ve been looking at the 0.2.0 release in a lot more depth this afternoon, and so far it’s great!! 🙇#2022-08-1115:18oliyHi all, I've just pushed a new release of fixa fixa lets you use fixtures at the level of individual tests in clojure https://github.com/oliyh/fixa The release brings two new features: • fail-after
(deftest ^{:fixa/fail-after "2023-01-05"} christmas-decorations-test
  (is (christmas-decorations)))
• run-after
(deftest ^{:fixa/run-after "2022-12-01"} future-v2-integration-test
  (is (some-feature-only-available-in-v2)))
All feedback welcome
#2022-08-1118:33Mitchell HarrisWhere has this library been all my life! I need this.#2022-08-1119:25Noah Bogartthis is very very cool#2022-08-1205:44Matthew MolloyHi team, Has anyone here tried https://htmx.org? Its a great and simple way to do server side rendering. I've written a Clojure backend https://whamtet.github.io/ctmx/ that provides a react (or Clojure reagent) like UI style. It feels a lot like writing frontend Clojurescript except you are on backend JVM and have super fast load times - no JS! Ctmx provides a defcomponent macro which is almost the same as defn except it stores symbol references in the metadata. You expose an endpoint with make-routes which recursively exposes all subcomponents and ties in seamlessly with the overlying htmx. This novel approach also opens up other possibilities. For example we maintain a call stack of components which we can use to auto-name fields. The autogenerated names can then reconstruct complex forms as JSON which always updates to match the UI of the form. It just makes web development so simple. There is a simple template available with luminus lein new luminus my-project +ctmx. Update project.clj to ctmx 1.4.5 and then hit lein run. The above link shows some samples of how to work ctmx, I'd love feedback, suggestions for improvement etc.#2022-08-1206:10rickheereI use it in a clojure and nodes project. I got inspired to do so by reading the docs of https://biffweb.com/#2022-08-1208:47EugenI'm exploring it and porting a htmx calendar to clojure ctmx https://github.com/ieugen/jlp/ .#2022-08-1212:15Eugenwhat about it @U02N27RK69K? @U02AM852K5F is whamtet on gh . He made a new release and was asking for feedback / usage of ctmx#2022-08-1212:52Cora (she/her)whoops my bad I misread #2022-08-1212:52Eugenno harm done 🙂#2022-08-1213:06ennI’ve been intrigued by HTMX for a while, thanks for sharing this! Looks cool.#2022-08-1213:07Eugenyes. I am impressed. try it out, see for yourself#2022-08-1214:10vonadzI know @U7YNGKDHA uses it for https://biffweb.com/#2022-08-1223:41myguidingstarthat's great. What's the story for anti csrf attacks? I don't see that mentioned#2022-08-1301:16Matthew MolloyYou can just add it as middleware. If you are asking about ctmx then it just converts UI components into reitit routes. You can wrap that in middleware for authentication, csrf etc.#2022-08-1511:08Rupert (All Street)We've been using HTMX at All Street - it's been fantastic for us. It embeds nicely inside of Hiccup pure data structures.#2022-11-0312:39Casey@U02AM852K5F If we have some ctmx related questions (that aren't really bugs so not suitable for a GH issue), do you have a channel here we could ask in?#2022-08-1220:36grzmHi! I scratched an itch and released a https://www.rfc-editor.org/rfc/rfc6570 library: https://github.com/grzm/uri-template There are a couple others already out there. This one uses https://github.com/cognitect-labs/anomalies instead of throwing exceptions, and returns detailed parse information in the event of an error.#2022-08-1508:29rickmoynihanThere’s also another clojure one here that a colleague of mine wrote a few years back here: https://github.com/lkitching/clj-templates He’s not much of a self publicist and never even added a README, but it’s pretty solid, well tested and easy enough to use.#2022-08-1708:28Mark WardleHermes v1.0.712 https://github.com/wardle/hermes/releases/tag/v1.0.712. Hermes can be used as a library or as a standalone microservice, providing access to SNOMED CT, a comprehensive health and care terminology/ontology. It also provides cross mapping to other codesystems, including ICD-10. It's now been stable in production in a number of healthcare facilities without difficulties, mainly due to Apache Lucene, LMDB and, most importantly, its functional, read-only, immutable design approach inherited from Clojure. I built similar tooling in Java and Go previously, but those languages did not make it easy to write the functionality needed, hitting a wall of complexity or being brittle to adapt to change, in ways I simply haven't experienced using Clojure, while using a 1/10 of the number of lines of code!#2022-08-1814:07pezCalva https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.293 is out. It makes me happy to see three new code contributors in the latest few releases. Warms thanks to @ajoberstar @maksimrv @am ❤️ 🙏. As warms thanks to the usual suspects too! Main news since last announced, Calva now: • has improved clojure-lsp integration • has an experimental first version of Clojure Notebooks (my crystal ball for this reveals the blurring of regular REPL driven development and Notebook workflows) • offers customizable inline result styling • defaults to inject fresh versions of nREPL and related tools • contains fewer bugs (haha, well, I actually think that recently we have fixed more than we have added) calva#2022-08-1817:09greglookAn initial release of https://github.com/amperity/separator is hot off the presses! This is an open-sourced version of Amperity's internal CSV parsing library, which we developed in response to the truly wild variety of delimiter-separated value data we were getting from our clients. Separator's primary purpose is customizable and defensive parsing, allowing it to handle many kinds of messy data files without exploding. With that, it's still significantly faster and more efficient than clojure.data.csv, but not quite as fast as Jackson. It also includes writing capability, making it a general-purpose DSV codec.#2022-08-1909:04eskosThe worst CSV I’ve ever heard of (thankfully not encountered myself) is of IIRC Danish origin, where due to diacritic characters and overloaded escaping the field delimiter is "" - yes, two double quotes. I don’t expect anyone to support this, this just reminded me of that…thing.#2022-08-1818:09borkdudeIntroducing ClavaScript, a ClojureScript syntax to JavaScript compiler! The primary use case for clava (its short name, not to be confused with Calva) is to produce JavaScript using ClojureScript syntax while producing ultra-small bundle sizes, by leveraging the JS platform directly. Clava does not protect you from the pitfalls of JS (mutability, equality), but lets you use the concepts you already know from ClojureScript and maps them more or less directly to JS where this makes sense. It comes with a standard library which has many of the core functions you know: map-indexed , for example, works like you would expect, but returns a mutable JS array instead of an immutable vector. Repo: https://github.com/clavascript/clavascript Npm: npm install clavascript Read https://github.com/clavascript/clavascript#differences-with-clojurescript for... well, the differences with ClojureScript. It has support for https://github.com/clavascript/clavascript#asyncawait and https://github.com/clavascript/clavascript#jsx. Clava is open to contribution, especially in the area of porting core functions. An example of a SolidJS app written using Clava: https://clavascript.github.io/demos/clava/solidjs/ (https://github.com/clavascript/clavascript/blob/main/examples/solidjs/src/App.cljs) Give it a spin and let us know what you think in #clavascript On behalf of the Clava core team (@borkdude, @lilactown, @corasaurus-hex): enjoy!#2022-08-1818:46pezExciting stuff! Are there plans for a clava REPL?#2022-08-1818:47borkdudeYes!#2022-08-1818:48borkdudeThe roadmap is roughly: • Support macros • Support REPL and in parallel: • extend stdlib / protocols / transducers#2022-08-1818:51pezHave you had a look at the coming JavaScript Records and whatever the vector type is named, in regards to how they might be relevant for ClavaScript?#2022-08-1818:52borkdudeYes, discussion here: https://github.com/clavascript/clavascript/discussions/38#2022-08-1819:47athomasoriginalHow does this compare to Cherry? If I were to assume, it sounds like Cherry is meant to be Clojure with ES6 output, whereas this is a skin over JS? Very cool project!#2022-08-1819:50borkdude@U6GNVEWQG Cherry and clava are very similar: in fact, clava is a fork of cherry but lives in its own repo now so it can be developed independently. Both output es6 code to integrate well with JS tooling and esbuild treeshaking#2022-08-2018:47Jeongsoo LeeI am so looking forward to the day when we can seamlessly write Clojure expressions in a <script> tag#2022-08-2018:50borkdude@U01LJQRJ2AU Check out https://github.com/babashka/scittle#2022-08-2018:52Jeongsoo Lee@borkdude Of course we can, your highness!#2022-08-2305:33eccentric JThis is cool! I think cherry might be THE cljs experience I have been daydreaming about 🤤#2022-08-2406:30mozinator2I think this will finally make #remix possible ! https://remix.run#2022-08-1819:05tony.kayFulcro 3.5.24 release to Clojars. The new version supports composing a transaction during routing that can run in pessimistic mode so that the parent’s ops complete before children. See https://book.fulcrologic.com/#_path_ordered_pessimistic_transactions_requires_fulcro_3_5_24#2022-08-2118:11ambrosebshttps://github.com/plumatic/schema 1.4.0 Adds https://plumatic.github.io/schema/schema.core.html#var-defprotocol for documenting and instrumenting protocol methods.
(s/defprotocol MyProtocol
    "Docstring"
    :extend-via-metadata true
    (^:always-validate method1 :- s/Int
      [this a :- s/Bool]
      [this a :- s/Any, b :- s/Str]
      "Method doc2")
    (^:never-validate method2 :- s/Int
      [this]
      "Method doc2"))
#2022-08-2205:11robert-stuttafordso cool that this library is still going and still providing its same good value!#2022-08-2209:22vemvVery cool! Curious, is it a zero-cost abstraction? That is, when checking is off, ideally this would be identical to vanilla protocol usage. With clojure.spec hacks normally there's a backing defn, which adds indirection and a cost. I've been meaning to try again for a while.#2022-08-2223:31ambrosebs@U45T93RA6 mostly no, there is a cost. there are essentially 3 different modes: instrumentation on, instrumentation off, and leave as-is (see the docstring for the 3rd). In the first two, inlining is disabled, so direct calls will pay an extra indirection + cache lookup in those cases. In normal wrapped calls, there is an extra indirection that also passes the cache via set! to the "actual" protocol function.#2022-08-2223:32ambrosebsperhaps it's a good idea to use the 3rd mode in prod, then it would be zero-cost (at least, that's what I intended).#2022-08-2223:33ambrosebsyou can move between mode 1 and 2, but mode 3 is permanent. so yeah, it's probably a good candidate for prod.#2022-08-2306:09vemvPerhaps the docstring could be a little clearer since one might not immediately know/remember what inlinling is, etc. Also if this is problematic for your environment is bit of a strange wording, because disabling checking in production is something I'd do out of principles, not because of 'problems' Anyway this does look like a great defprotocol. It looks like one could do this at macroexpansion-time?
(if *assert*
  s/defprotocol
  defprotocol)
With other solutions I've seen (and written!) one can't, because the method names for declarations will be different vs. the method names for usages.
#2022-08-2320:46ambrosebsAgreed, actually the wording assumes you'd only want this if Clojure's implementation details change and breaks instrumentation. I didn't really consider you could use it for perf reasons until this conversation.#2022-08-2320:53ambrosebs> With other solutions I've seen (and written!) one can't, because the method names for declarations will be different vs. the method names for usages. Yes, I studied your impl in speced.def while designing this, and s/defprotocol does not rename methods. the same name is used to extend and invoke.#2022-08-2321:06ambrosebsUpdated doc: https://github.com/plumatic/schema/commit/0a699d7715de623e15ddc1dbc69ae1b634860e4f#2022-08-2410:12vemvNot sure if there was anything worth studying :) Is the gist of your solution the following? It works, would love to port it to speced.def. Please LMK if there's some missing piece
(clojure.core/defprotocol P
  (do-it [this]))

(def sync! (fn [^clojure.lang.AFunction outer-mth
                ^clojure.lang.AFunction inner-mth]
             (when-not (identical? (.__methodImplCache outer-mth)
                                   (.__methodImplCache inner-mth))
               ;; lock to prevent outdated outer caches from overwriting newer inner caches
               (locking inner-mth
                 (set! (.__methodImplCache inner-mth)
                       ;; vv WARNING: must be calculated within protected area
                       (.__methodImplCache outer-mth)
                       ;; ^^ WARNING: must be calculated within protected area
                       )))))

(let [inner-method do-it
      instrument! (fn [f] ;; the value of @#'do-it
                    (fn [x] ;; a fn with the same sig as do-it
                      (assert (pos? x)) ;; an example assertion, as it would be provided by users
                      ;; invoke whatever `do-it` does:
                      (f x)))
      outer-method (instrument! inner-method)]
  (alter-var-root #'P assoc-in [:method-builders #'do-it] (fn [cache]
                                                            (set! (.__methodImplCache outer-method) cache)
                                                            (sync! outer-method inner-method)
                                                            outer-method))
  (alter-meta! #'do-it assoc :inline (fn [& args]
                                       `((do ~(symbol #'do-it))
                                         
#2022-08-2410:15vemv(also, does that do in the alter-meta! add something?)#2022-08-2415:27ambrosebs@U45T93RA6 yep, looks like it covers all the bases for Clojure JVM. the do is the dirty hack to stop the compiler inlining the method call: ((do do-it) ...) doesn't inline, but (do-it ...) can. these tests should fail without the do https://github.com/plumatic/schema/blob/0a699d7715de623e15ddc1dbc69ae1b634860e4f/test/cljc/schema/core_test.cljc#L1710-L1730#2022-08-2415:29ambrosebsI wanted to make a shared library with these ideas but I couldn't decide which functions to expose. Once we have a few impls, maybe it'll be more obvious.#2022-08-2415:30ambrosebsthere was also interest in adding this to malli.#2022-08-2415:33vemvThanks much :) will see if I can create a tiny ns with the core ideas#2022-08-2417:07vemvBesides from sync! , I think I'd only need this defn:
(defn instrument! [protocol-var
                   fns #_{#'foo ;; a var from the protocol, to be instrumented
                          (fn [f] ;; always receives a single function `f`, representing the original value of @#'foo
                            (fn [this x y z] ;; consumers must build this argv the right arities, for each method (and possibly for each arity of the method)
                              (f this x y z)))} ;; consumers must build the right calls to `f`
                   ]
  (doseq [[var-ref wrapper] fns
          :let [inner-method @var-ref
                outer-method (wrapper inner-method)]]
    (alter-var-root protocol-var assoc-in [:method-builders var-ref] (fn [cache]
                                                                       (set! (.__methodImplCache outer-method) cache)
                                                                       (sync! outer-method inner-method)
                                                                       outer-method))
    (alter-meta! var-ref assoc :inline (fn [& args]
                                         `((do ;; do: for preempting inlining
                                             ~(symbol var-ref)) ;; n.b. `symbol` shortcut not available in older clojures
                                           
individual libraries (e.g. speced.def, malli-whatever) would be responsible for passing the right fns map. Each library likely does its own parsing anyway so it's not much of a requirement This API would make sense for me for speced.def. I just tried it now with some speced/fn s and it works - would fit for a defprotocol reimpl. Would be thankful if you release this as an isolated library. I actually have to be pedantic about copyright :)
#2022-08-2417:09vemv(Also since I use malli at work, I'd give two separate usages to it!)#2022-08-2417:22ambrosebsThanks @U45T93RA6! I'll spin up a lib.#2022-11-2115:44vemvHey there :) was there luck with the lib?#2022-08-2407:48bozhidarCIDER 1.5 ("Strasbourg") is out! Check out the release notes for more details https://github.com/clojure-emacs/cider/releases/tag/v1.5.0 Cheers! cider P.S. This release is dedicated to the brave people of Ukraine, who today celebrate their Independence Day, and their European future! Слава Україні!#2022-08-2407:57Dimitar UzunovГероям слава#2022-08-2407:52bozhidarShortly afterwards I thought today might be a good day for an nREPL 1.0 release, so now that's done as well https://github.com/nrepl/nrepl/releases/tag/1.0.0 🎉 There's always a lot more we can do, but I think the project is in a really great shape, compared to where it was in 2018 and deserves for this to be reflected in the version number. 🙂 Stay tuned for some updates regarding the plans for the future there!#2022-08-2407:55Christian JohansenThank you for your amazing work on this invaluable piece of tooling. Couldn’t go a day without it 🙂#2022-08-2411:17Eugenhere here 🙂#2022-08-2416:24wevremhear hear 🙂#2022-08-2503:26HuahaiEditscript 0.6.1 is released. Editscript is a diffing and patching library for Clojure/script data structures. This release added options to control granularity of string diffing, so it can be character, word, or line level diffing, allowed specifying a timeout when diffing, and a few other improvements. https://github.com/juji-io/editscript#2022-08-2510:33plexusNew release of com.lambdaisland/classpath, which adds the ability to recursively watch deps.edn files for changes, when using :local/root https://github.com/lambdaisland/classpath#2022-08-2513:18athomasoriginalNice! Is the goal of a tool like this to improve the dev workflow by automatically fetching new deps with restarting the app? Or rather, when you use a tool like this, what wins did you observe?#2022-08-2607:09plexusThe benefit is that you don't need to restart, you can add or upgrade deps and they will become available to the process immediately.#2022-08-2602:09wilkerlucioPathom 3 2022.08.29-alpha is out! https://clojars.org/com.wsscode/pathom3 This release includes some fixes and a couple of nice new planner optimisations, in special there is one finally capable of optimising sibling similar OR branches (check the attached image, before on the left, after on the right). These optimisations are still experimental, to use than you need to add the flag ::pcp/experimental-branch-optimizations in your env (if you find any issue with them active, please make a report). Changes: • Add support for ::pcr/wrap-merge-attribute hook in async and parallel runners • Add support for ::pcr/wrap-merge-attribute hook on idents (all runners) • Fix issue #152 missing shape check when data value is nil • Optimize AND siblings with same branches • Optimize OR siblings with same branches 🎉 • Optimize AND branch that has same branch structure as parent • New branch optimizations are opt-in via ::pcp/experimental-branch-optimizations flag at env • Fix ::pcr/wrap-mutation-error, now working in all runners#2022-08-2718:13timonkot13Hello, I want to present my humble template https://github.com/timonkot131/clojurescript-screeps-webpack. It uses webpack with babel for bundling instead of the Closure's advanced optimizations. I have seen some of the Screeps projects on github, but all of them use optimizations. These optimizations are really nice when you are deploying your code to prod, so your script loads pretty fast, but this is not the case for deploying for Screeps, because it doesn't produce understandable error messages due to massive minifications. So I decided to create this project to resolve this issue. The template doesn't do a lot of stuff, it just compiles the code via https://github.com/thheller/shadow-cljs and bundles it via https://github.com/webpack/webpack with https://webpack.js.org/loaders/babel-loader/, thus compiled code can be executed in node 8 environment on screeps server.#2022-08-2718:17p-himik> it doesn't produce understandable error messages due to massive minifications Is there no way to make Screeps use source maps?#2022-08-2718:28timonkot13shadow-cljs doc says what this is possible https://shadow-cljs.github.io/docs/UsersGuide.html#compiler-options. I will check this out to see if this will work#2022-08-2719:06MegaMattI think i’ve been able to get good node stack traces with a combination of the compiler options and the npm package source-map-support#2022-08-2720:51timonkot13I think source-map support is a good feature to have, thus I created an issue for it. I think we may continue the discussion about this topic there https://github.com/timonkot131/clojurescript-screeps-webpack/issues/1. @U02SD8PATK2 So how do you implement it? Can you show your config or leave a link to a project?#2022-08-2801:44MegaMattI don't any longer. it was in a now abandoned project. but if i recall correctly in the entry file i just required it like so.
(ns some.ns
  (:require ["source-map-support/register"]))
I was using deps.edn and. my build config set
:optimizations :simple
:target        :nodejs
:bundle-cmd {:default ["npx" "webpack" "./out/main.js" "-c" "./webpack.config.js"]}
and my webpack is
const path = require('path');

module.exports = {
  mode: 'production',
  entry: './out/main.js',
  target: 'node',
  // devtool: 'source-map',
  output: {
    path: path.resolve(__dirname, 'deploy'),
    filename: 'main.js',
  },
};
I don't remember if there was anything else involved as this was quite a while ago. I was deploying things to a lambda.
#2022-08-2812:03timonkot13Actually, I have ended up with the same solution as you, but with (.install (js/require source-map-support)). It works fine with nodejs, but in the screeps environment, it shows this error
Error: Unknown module 'path'
    at Object.requireFn (<isolated-vm>:20840:23)
    at Object.path (main:26726:18)
    at __webpack_require__ (main:26750:41)
    at Object../node_modules/source-map-support/source-map-support.js (main:22859:12)
It looks like the library uses the "path" module, which is probably constrained by devs. I tried your version, but the error is keeping the same, anyway thanks for the answer. I feel that the possible workaround may be the retrieveSourceMap callback: https://github.com/evanw/node-source-map-support#options
#2022-08-2816:53timonkot13@U2FRKM4TW After all, I think this is possible, You just need to consume it via https://github.com/mozilla/source-map and implement error mapping. Like here https://stackoverflow.com/questions/51035699/screeps-how-do-i-set-up-source-map-using-typescript-and-webpack#2022-08-2913:08bortexzReleased first version of https://github.com/bortexz/resocket , a Clojure WebSocket client (wrapping JDK11 WebSocket) exposing a core.async API, a`reconnector` fn that keeps creating new connections when current ones are closed, automatic ping at given intervals, abort idle connections, etc#2022-09-3015:05Byron ClarkThank you for this library. I used it for a prototype recently and loved the interface and simplicity.#2022-08-2913:46blueberryDeep Diamond 0.25 released with RNN support on CPU and GPU! The fast Clojure Deep Learning library. https://github.com/uncomplicate/deep-diamondhttps://t.co/PVwsqO5ID1#2022-08-2921:22uochanJust released vim-iced ver 3.11.3086, Clojure Interactive Development Environment for Vim8/Neovim. https://github.com/liquidz/vim-iced Added evaluation in context like CIDER :) https://liquidz.github.io/vim-iced/#evaluate_in_context#2022-08-2922:56sheluchinThis evaluate-in-context functionality is great. I really like being able to test in the REPL without having to make back and forth edits all the time. e.g. if I'm testing out a new query function, I can just provide the DB connection and query parameters using eval-in-context and repeat execution with the same context/paramers through as many iterations of the function as I need to get it right, never having to hardcode test values into the source code I'm testing. Thanks very much @UBL24PLE6.#2022-08-3000:31rschmuklerAnnouncing tapestry-0.3.0-SNAPSHOT - seeking feedback or thoughts (message me or post in #teknql) on the new APIs before potentially releasing it with the GA release of JDK 19 later in september. Changes: • Added tapestry.core/interrupt! to interrupt fibers. • Added tapesty.core/timeout! to set a timeout on fibers • Added tapestry.core/alive? to see whether a fiber is still alive • Refactored fibers to use a custom tapestry.core/Fiber type allowing for better introspection (custom print-method) as well as the functions above. Takes us a step away from manifold (used to return deferreds) and toward built-in JDK stuff. • Removed custom tapestry.core/locking implementation - was needed when loom and clojure.core/locking didn't play well together (Monitors weren't yet supported). • Updates to the JDK 19 APIs instead of the loom preview build APIs. • Updated the readme w/ JDK 19 installation instructions and examples of the new APIs Check it out here: https://github.com/teknql/tapestry#2022-08-3001:30didibusLooks good. It'll be interesting to see what kind of various async abstractions eventually develop on top of loom, tapestry looks like a nice start. I'm also curious to see core.async loom support and maybe promesa loom support, as well as Missionary or other structured concurency approach#2022-08-3013:53Joshua SuskaloI will say I doubt if core.async will do anything to support loom (because it needs to support JDK versions from 8 ). Most likely the easiest way to handle it will be to monkey patch it so that go blocks just use tapestry and parking put and take get replaced with the blocking ones.#2022-08-3017:44hlshipWell, I have to say you chose a really great name!#2022-09-0409:15orestisWasn't tapestry a Java web framework? #2022-08-3013:19borkdudefs 0.1.11 (File system utility library for Clojure) https://github.com/babashka/fshttps://github.com/babashka/fs/issues/65: Explicitly support :win-exts option on which function (https://github.com/lread) • https://github.com/clj-kondo/clj-kondo/issues/1782: exists? should never throw on illegal input path. • Remove ^:const to not cache OS-specific constants, so AOT-ed code can be re-used in multiple OS-es. #2022-08-3016:57Darrick WiebeI've updated and released Jordan Lewis's data.union-find 1.0.0 It's a clean and fast implementation of the Union Find algorithm for quickly finding groups of interrelated elements. https://github.com/jordanlewis/data.union-find This version updates from the previous 0.1.0 release with support for fast construction using transient/persistent! I used this library as it is now in 2015 for a drug discovery project and it worked great. Unfortunately that variant was never properly released. I recently came back to it for a different project and asked Jordan to update the release. He asked me to take it over instead, so I have. I don't expect any significant changes in the future since I think it's feature complete and stable. If you aren't familiar with Union Find, you should check it out. It's a simple idea and quite useful!#2022-08-3017:10respatializedhttp://www.frankmcsherry.org/graph/scalability/cost/2015/01/15/COST.html I first read about union-find in this engagingly written (and frankly devastating) takedown of Scalable:tm: "big data" systems. Thanks for releasing this implementation!#2022-08-3018:00Charles ComstockI've used https://github.com/huahaiy/nifty/blob/master/src/nifty/disjoint_set.cljc for this in the past as it supports both CLJ and CLJS. I know it can be tricky to support both, but it's really appreciated when implementations of fundamental data-structures support multiple platforms. I am curious how the data.union-find implementation compares on performance though.#2022-08-3018:23HuahaiBy looking at the code, the data.union-find library seems to have immutable semantics, having transient and such, whereas mine is a faithful implementation of the mutable algorithm of union-find in Clojure syntax. Mine also use loop-recur instead of explicit recursion, so it probably won’t blow the stack.#2022-08-3018:24Darrick Wiebe@UFTRLDZEW Thanks for the link! @UMGAMGWF8 interesting, thanks for the pointer to the nifty lib. I hadn't seen it before. I'd definitely be curious about the relative performance between these implementations. I see that nifty also implements disj which is nice. @U0A74MRCJ you're right, I was just writing the same thing!#2022-08-3018:25Darrick WiebeIn practice I haven't seen any problem with blowing the stack even with reasonably large scale usage, but it's something to consider.#2022-08-3110:43Ertugrul CetinHi everyone 👋:skin-tone-2: I created a simple 3D demo with PlayCanvas. Also used Odoyle Rules for the logic. I hope you like it! GitHub: https://github.com/ertugrulcetin/playcanvas-cljs-demo Live Demo: https://ertugrulcetin.github.io/playcanvas-cljs-demo#2022-08-3115:44borkdudeA new version of https://babashka.org/scittle/: execute Clojure(Script) straight from browser script tags via SCI. 0.3.10 • Add scittle.promesa.js plugin. This gives access to the https://cljdoc.org/d/funcool/promesa/8.0.450/doc/user-guide library. • Add scittle.pprint.js plugin. This gives access to https://cljs.github.io/api/cljs.pprint/. • Improve error messages https://github.com/babashka/scittle/releases/tag/v0.3.10 Channel: #scittle#2022-08-3118:37eccentric JThis is perfect#2022-08-3120:46wilkerlucioawesome! where can I find the CDN link to include promesa?#2022-08-3121:06borkdudeoh good point, let me update that#2022-08-3121:08borkdude@U066U8JQJ https://github.com/babashka/scittle/releases/tag/v0.3.10#2022-09-0117:22ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2022.09.01-15.27.31 with lots of exciting stuff! 🚀 This is a important release, it starts to use https://github.com/clojure-lsp/lsp4clj v1 which is entirely implemented in clojure and doesn't depend on lsp4j java library anymore, along with the dep-graph-queries feature, it's a big change to whole clojure-lsp so if any issues, please let us know Besides that we have lots of new refactorings (check gif for one of them), fixes, performance improvements and smart checks during startup like the classpath scan fail question Thanks and kudos to @jacob.maine who have been helping a lot clojure-lsp in the last months! gratitude For more info, check #lsp Happy coding! clojure-spin#2022-09-0120:02jacob.maineAnother refactoring in this release, or actually a set of 4 related refactorings:#2022-09-0121:54wilkerluciowow, restructure-keys looks awesome!#2022-09-0203:22Cam SaulHello everyone. I'd like to announce a brand new tiny library that fixes a personal pain point. https://github.com/camsaul/humane-are I've been using some version of this or another for a while now; I thought it was finally time to spin it out into a separate library, in case anyone else found it useful. I love clojure.test/are, but I've generally avoided it for two reasons: 1. Failing assertions give no indication as to which set of arguments failed if you're using anything that pretty prints test output, such as https://github.com/pjstadig/humane-test-output, https://github.com/clojure-emacs/cider, or https://github.com/weavejester/eftest 2. are lets you shoot yourself in the foot by writing expressions that include is or testing, and wraps them in another is without complaining Humane Are solves those problems. Try it out and let me know what you think!#2022-09-0204:53seancorfieldThis is cool. clojure.test can be pretty frustrating and quite limited. I will take this opportunity to promote Expectations:
{:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "88fbede9e6ebc8dbede9e6a5ffe1e6a5b9b9a5e4e9f8fce7f8"}, :content ("[email protected]")}
Completely clojure.test-compatible in terms of tooling but a lot more expressive.
#2022-09-0211:46borkdudeI've been avoiding are mostly in favor of doseq#2022-09-0211:50borkdudeAlso, I find giant are blocks a pain when you want to isolate one case to work on in the REPL#2022-09-0213:28Noah BogartI wonder if this could be upstreamed.#2022-09-0207:04slipsethttps://clojars.org/clj-commons/clj-yaml is released with a bump of snakeyaml to 1.31. This fixes https://github.com/advisories/GHSA-3mc7-4q67-w48m. Thanks to @tscrowley for the PR!#2022-09-0416:29djanusI’ve released version 0.3.3 of https://github.com/nathell/skyscraper, a framework for structurally scraping whole sites in Clojure. Get it from Clojars: {skyscraper/skyscraper {:mvn/version "0.3.3"}} Changes in this release: • Feature: To facilitate debugging, processors can now set the :skyscraper/description key on contexts. These descriptions will be logged when downloading, instead of the URL, and won’t be propagated to child contexts. • Fix: Skyscraper now properly closes the cache when using scrape! and one of the processors throws an exception. • Fix: Skyscraper no longer complains when the server returns a quoted charset in the Content-type header. • Fix: :skyscraper.traverse/priority is no longer propagated to child contexts. • Infra: Skyscraper’s dependencies are now managed with cli-tools, with Kaocha being used for testing. #2022-09-0519:30djanusTurned out I rushed with the announcement. Due to a misconfiguration (a failed attempt at migrating away from Leiningen to deps.edn), the pom.xml from 0.3.3 declared no dependencies. I've now pushed 0.3.4 which has a correct dependency listing and is otherwise the same as 0.3.3. Apologies and happy scraping!#2022-09-0417:31seancorfieldcom.seancorfield/honeysql {:mvn/version "2.3.928"} -- turn Clojure data structures into SQL: • Address https://github.com/seancorfield/honeysql/issues/425 by clarifying that INTERVAL as special syntax may be MySQL-specific and PostgreSQL uses difference syntax (because INTERVAL is a data type there). • Address https://github.com/seancorfield/honeysql/issues/423 by supporting DEFAULT values and DEFAULT rows in VALUES. • Address https://github.com/seancorfield/honeysql/issues/422 by auto-quoting unusual entity names when :quoted (and :dialect) are not specified, making HoneySQL more secure by default. • Fix https://github.com/seancorfield/honeysql/issues/421 by adding :replace-into for :mysql dialect. • Address https://github.com/seancorfield/honeysql/issues/419 by adding honey.sql.protocols and InlineValue with a sqlize function. • Address https://github.com/seancorfield/honeysql/issues/413 by flagging a lack of WHERE clause for DELETE, DELETE FROM, and UPDATE when :checking :basic (or :checking :strict). • Fix https://github.com/seancorfield/honeysql/issues/392 by adding support for WITH / (`NOT`) MATERIALIZED -- via PR https://github.com/seancorfield/honeysql/issues/420 https://github.com/robhanlon22. Follow-up in #honeysql#2022-09-0418:38djanusAnd I have another announcement to make! Announcing https://github.com/nathell/cartestian, a small experimental library that helps write more comprehensive tests. From the README: > In the life of a developer who writes tests for their software, there are always two (or more) possibilities. In an A/B test, either your user is assigned to group A, or to group B. Either that API call succeeds, or it fails. The list goes on. > Oftentimes, we are tempted to only test the happy path. But it would be good to test all the combinations – a Cartesian product of the “dimensions”, if you will. Or at least a reasonably-sized subset of them, if the possibility space is large. > This library helps you to do just that. I’d love to hear any feedback on this one. Do people think it’s a good idea? The library is so experimental that I’m not yet building any artifacts nor publishing them on Clojars, but if there’s interest I’ll start doing so.#2022-09-0418:56seancorfieldThis is interesting. I think one of my biggest problems when trying to test across combinations is how to specify what the expected outcome should be, especially if there's a failure mode that throws an exception. How are you typically mapping from "possibilities" to outcomes in your combination tests?#2022-09-0419:05djanusGreat question! It will broadly depend on the particular combination of possibilities (the v in the example), but how exactly depends on the test. For example, in https://github.com/nathell/skyscraper/blob/master/test/skyscraper/cache_test.clj#L59-L75, I’m checking for the :succeeding dimension to determine expected behaviour. Admittedly a more advanced example would be in order, though.#2022-09-0713:22MaxThis seems similar in spirit to property-based testing (eg test.check). I'm interested in your thoughts on the overlaps and differences with this approach?#2022-09-0716:25djanusI was thinking this too! Think this is a “sub-concept” of property-based testing: more coarse-grained and arguably easier to grasp. I found writing a test.check generator can be tricky. But I guess cartestian could be theoretically rewritten in terms of test.check. 🙂#2022-09-0421:28borkdudeA new version of #babashka! Lots of updates, bug fixes and error location improvements. 0.9.162 (2022-09-04) • https://github.com/babashka/babashka/issues/1343: Fix postgres feature • https://github.com/babashka/babashka/issues/1345: add .ssl.SSLException and java.net.SocketTimeoutException classes (https://github.com/lread) • Fix satisfies? with marker protocol (no methods) • Update rewrite-clj • Update deps.clj • Update babashka.cli • Update org.clj-commons/clj-yamlbabashka.fs: fix expand-home on Windows • babashka.fs: expose :win-exts • nREPL: preserve stacktrace on exception • Fix https://github.com/babashka/babashka/issues/1322: improve error location • Fix https://github.com/babashka/babashka/issues/1338: add-watch segfault • Fix https://github.com/babashka/babashka/issues/1339: resolve record name ending with dot. (Also, there's a new project brimming in #babashka-bbin which will be announced later, after more people test it.)#2022-09-0610:18mariaWe are super happy to finally announce the projects for the next funding round of ClojuristsTogether https://www.clojuriststogether.org/news/q3-2022-funding-announcement/ 🎉 We are funding 6 projects with 9000 USD and 5 projects with 2000 USD. The projects and grantees are: USD 9,000 - Matthew Huebert for https://www.maria.cloud/ - Sam Ritchie https://github.com/mentat-collective/mathbox.cljs - Kira McLean for https://github.com/scicloj/clojure-data-cookbook - Christophe Grand and Baptiste Dupuch for https://github.com/Tensegritics/ClojureDart - Michiel Borkent for https://github.com/borkdude - Arne Brasseur and Gaiwan for https://github.com/lambdaisland/kaocha USD 2,000 - Chris Badahdah for https://github.com/djblue/portal - Will Acton for Exo (unreleased) - Vlad Protsenko for https://github.com/cljfx/cljfx - Jacob O’Bryant for https://github.com/jacobobryant/biff - Adam Helins for https://github.com/clojupedia/main A big thank you to all our members for the support! We couldn’t fund those projects without you 💙 💚#2022-09-0611:40mpenetNew version of https://github.com/exoscale/interceptor released (0.1.14) - This adds bb + fixes cljs support - thanks to @borkdude for the work on bb and other related bits.#2022-09-0611:49mpenetand github is down... good timing#2022-09-0611:50jjttjjThanks to both of you for doing this! I've been happily using a 1 line change quick hack to use interceptor on bb, great to see it in master now babashka#2022-09-0611:58borkdude@U064UGEUQ The currently released version does require bb from master#2022-09-0611:58borkdudeI think#2022-09-0611:58borkdudemaybe not#2022-09-0612:01borkdudeat least, it's tested with that but might still work with the oldest. Also added compatibility with auspex, which does require master and it's tested with that on CI in interceptor#2022-09-0612:02borkdudeThe core.async integration does need master. @U064UGEUQ what are you using interceptor for?#2022-09-0612:12jjttjjGood to know, I haven't been using the async stuff yet but may at some point. I've been using the interceptor pattern with https://github.com/cognitect-labs/aws-api / https://github.com/grzm/awyeah-api to do stuff with requests/responses. For instance, mocking out the clients during testing, making sure dynamobdb requests include asking for consumption pricing info then recording that info somewhere when we get it in the response#2022-09-0612:25borkdudeOh that's good to hear /cc @U0EHU1800 ^#2022-09-0613:33Carsten BehringVersion 0.4.0 of https://github.com/scicloj/sklearn-clj is released! sklearn-clj gives easy access to most Python sklearn estimators from Clojure standalone or as a plugin into Changes in this release are: * fix result of predict to be a probability distribution * fixed serialization of contexts containing sklearn-clj models * allow reverse-mapping of categorical variables of prediction#2022-09-0715:54mkvlr🔭 Clerk – Moldable Live Programming for Clojure io.github.nextjournal/clerk {:mvn/version "0.10.550"} has been released . Also we've finally started to put together documentation so we're happy to present the 📓 https://snapshots.nextjournal.com/clerk/build/b12d8b369a69ca4b41fcf4988194dfbc201c6e1c/book.html. Notable improvements in this release: • 🙈 Support setting visibility for results, per form and per doc • :sleuth_or_spy::skin-tone-2: Fail eval if var is only present at runtime but not in file And more, details in the:wood: https://github.com/nextjournal/clerk/blob/2e8cef8e238afa962c7e0ac1ed6238c3db040821/CHANGELOG.md#010550-2022-09-06, get the release on 📦 https://clojars.org/io.github.nextjournal/clerk, follow-up in #clerk.#2022-09-0718:32Ivar RefsdalHi! Here is https://github.com/ivarref/healthy, a tiny library to simplify writing health checks, this time with a new release: com.github.ivarref/healthy {:mvn/version "0.1.17"} It provides a "sliding window" into your application's errors, allowing you to see if it recovers or not once an error has occurred. This new release adds the concept of error-percentage, allowing a service to return healthy/unhealthy based on some percentage of failures. Hope it is useful for someone. 😊#2022-09-0718:37practicalli-johnhttps://github.com/practicalli/clojure-deps-edn user-level alias for a wide range of community tools for Clojure CLI (deps.edn) projects • updated libraries in aliases to latest versions using antq (see Changelog for exact details) • added cljstyle check as a GitHub action using setup-clojure GitHub action, added a .cljstyle configuration that matches cljfmt • formatted deps.edn with cljstyle changes https://github.com/practicalli/clojure-deps-edn#2022-09-0721:40HuahaiDatalevin 0.6.17 is released. This release added a function to simulate a Datalog transaction without persisting the changes; added support for big integer and big decimal numbers in both key-value and Datalog API; improved documentation to support cljdoc build. Thanks to contributors @TheExGenesis and @lee https://github.com/juji-io/datalevin#2022-09-0805:43Cam SaulMethodical 0.13.2 is out! Methodical is a multimethod library that acts like a drop-in replacement for defmulti and defmethod, written entirely in Clojure. It supports building multimethods programatically in a nondestructive/functional manner; methods with "partial-default" dispatch values like [:some-keyword :default]; CLOS-style :before, :after, and :around aux methods, and method combinations; easy next-method invocation; and ships with helpful debugging tools. 0.13.2 is a small bugfix release that fixes issues with nil dispatch values. https://github.com/camsaul/methodical#2022-09-0813:00Noah Bogartthis library is so friggin cool#2022-09-0812:42borkdudehttps://github.com/clj-kondo/clj-kondo, static analyzer and linter for Clojure code that sparks joy 2022.09.08 • :config-in-call - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#config-in-callhttps://github.com/clj-kondo/clj-kondo/issues/1127: :config-in-tag - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#config-in-taghttps://github.com/clj-kondo/clj-kondo/issues/1791: Fix issue with namespace-name-mismatch on namespaces with + sign (and others) • https://github.com/clj-kondo/clj-kondo/issues/1782: Fix issue with jar URI missreporting to file-analyzed-fn, bump babashka/fs to 0.1.11 • https://github.com/clj-kondo/clj-kondo/issues/1780: Can not use NPM dependency namespaces beginning with "@" in consistent-linter alias • https://github.com/clj-kondo/clj-kondo/issues/1771: don't crash on empty ns clauses: (require '[]) and (import '())https://github.com/clj-kondo/clj-kondo/issues/1774: Add support for sourcehut inferred git dep urls for the Clojure CLI • https://github.com/clj-kondo/clj-kondo/issues/1768: Expose a tag function in clj-kondo.hooks-apihttps://github.com/clj-kondo/clj-kondo/issues/1790: Add support for :filename-pattern in :ns-grouphttps://github.com/clj-kondo/clj-kondo/issues/1773: false positive type mismatch warning with hook • https://github.com/clj-kondo/clj-kondo/issues/1779: lazy-seq should be coerced a list node • https://github.com/clj-kondo/clj-kondo/issues/1764: store overrides in cache and don't run them at runtime Channel: #clj-kondo#2022-09-0812:57borkdudeCarve: carve out the essentials of your Clojure app Carve will search through your code for unused vars and will remove them. v0.2.0: misc. fixes and clj-kondo upgrade https://github.com/borkdude/carve#2022-09-0817:33ambrosebsArticle: A Significant clojure.test Enhancement https://blog.ambrosebs.com/2022/09/08/clojure-test-uncaught.html Project announcement: Calling for early testers and feedback for a clojure.test enhancement: https://frenchy64.github.io/fully-satisfies/latest/io.github.frenchy64.fully-satisfies.uncaught-testing-contexts.html Dependency info: https://github.com/frenchy64/fully-satisfies#dependency#2022-09-0819:32Alex Miller (Clojure team)I have no memory of this ticket :) but interested in seeing a proposal!#2022-09-0819:33Alex Miller (Clojure team)Oh, this came from someone else, that's why I don't remember it, just forwarded it along#2022-09-0821:17ambrosebs@U064X3EF3 Well, it was fun speculating about how you might have come about it anyway 🙂#2022-09-0821:27Alex Miller (Clojure team)I do have a vaguely related clojure.test ticket that I did file though#2022-09-0821:28Alex Miller (Clojure team)https://clojure.atlassian.net/browse/CLJ-2639#2022-09-0821:28Alex Miller (Clojure team)vaguely related in that it's about getting better feedback on exceptions from tests#2022-09-2605:01ambrosebs@U064X3EF3 attached a proposal to https://clojure.atlassian.net/browse/CLJ-2525#2022-09-0818:41chrisnIntroducing https://github.com/cnuernber/ham-fisted - A high performance core Clojure research project. For those of you who aren't https://www.reddit.com/r/Clojure/comments/x8hn49/hamfisted_a_new_high_performance_clojure_library/, I have released a project which provides some high performance base Clojure datastructures such as persistent maps and persistent vectors as well as some higher performance base primtiives such as frequencies and group-by. I focus on many things and the library has a lot of ideas, some good and some that didn't pan out, and some public benchmarks. My hope is this becomes a community driven project to improve the platform we are all standing on. Take a moment to check it out and take it for a test drive. I am always open to issues and PRs and honestly this morning seeing two issues - which means people are actually working with the code - made my day. So don't hesitate to tell me what you really think 🙂. Enjoy!#2022-09-0819:17Darrick WiebeHow does this compare to the data structures in https://github.com/lacuna/bifurcan?#2022-09-0819:33chrisnThey are definitely comparable - it would be interesting to profile them against each other. Aside from performance (which if Bifurcan has any major advantages we should usurp them) I would say the ham-fisted datastructures implement all the Clojure interfaces - Indexed, IPersistentVector, IEditableCollection, etc. You can see this with a quick scan of the java source code or the api implementation. So a mutable ham-fisted map is a bitmap trie but it implements IEditableCollection so you can use the transient functions, assoc! and friends and persistent! works. ham-fisted aims to be drop-in compatible with Clojure's existing pathways. Furthermore there is a lot in ham-fisted aside from datastructures - as I note in the reddit post and the README there are a lot of algorithmic primitives that either perform better, such as group-by, or that plain don't exist and/or perform much better such as update-values and group-by-reduce. Finally there are Clojure-friendly wrappers for all the java primitive array types so you can pass a primitive array backed data to the rest of your Clojure program and nth, reduce and friends all work correctly and perform much better. There are type-specific implementations of sort and sort-indirect provided for ints, longs, and doubles that perform much better than the generic java sort pathways. So I would say overall two things aside from performance which both libraries focus on. First - it is drop-in replacement for many core Clojure datastructures and functions and second there are new primitives to the core clojure functions that I think are interesting/worth researching further.#2022-09-0819:35chrisnWell, and another thing there is a lazy-noncaching namespace which provides drop-in replacements of map, filter, and concat which perform better than eduction in some pathways and don't require you to rewire your code from pure clojure.core to transducer form and which in map's case also preserve the random-access property of the input if all the inputs are themselves random-access.#2022-09-0820:28borkdude@UDRJMEFSN > there is a lazy-noncaching namespace which provides drop-in replacements of map, filter, and concat which perform better than eduction in some pathways and don't require you to rewire your code from pure clojure.core to transducer form That's really interesting! @U4YGF4NGM and I have been doing a similar thing in #clavascript which is a CLJS syntax to JS compiler which implements some CLJS-esque things directly in JS (but most of the things work directly with mutable data structures, so no CLJS data structures). The implementation there is based on generators. Properties of lazy values returned from map, filter, range, etc are that they are not cached and not chunked, so consuming the value twice will make calculations happen twice, but otherwise they should behave pretty much identical to CLJ(S). You can play around with that here: https://clavascript.github.io/clavascript/ ham-fisted seems like a really interesting lib: I guess the idea is that you can use many things as drop-in replacements with clojure.core and it should all mix and match without rewriting your code, but get better performance... right?#2022-09-0820:40chrisnYou are exactly right about lazy-noncached. I think that is a more error prone programming model overall but the performance benefits can be substantial as long as you respect the sharp edges. Drop-in - well that is the theory:-). - I am working on this on far less than part time so ymmv. You will get better performance if you move further towards the library and use some of the primitives in it - update-values, union, etc are much faster if you are using datastructures from the library and if you know you are dealing with doubles sort is much faster if you pass in a double array - also true for int and longs. In some respects it is also a far simpler bridge into dtype-next land and something I intend to integrate into dtype next as a substrate. I think overall I want a community platform where we can try out different datastructures and algorithmic primitives in a testable way to move the language forward. I think there is room to improve both clojure.core and the persistent datastructures but I don't think the core language is the place to do it until we are damn sure we are ahead and not causing regressions.#2022-09-0820:43chrisnSpeaking of JS - there is probably room for this type of experimentation in CLJS meaning I think a very careful examination of the datastructures and algorithms that underly the CLJS system would yield substantial benefits but I have no proof of this -- it is just a suspicion.#2022-09-0820:57borkdudeYes and since they are built on protocols, it should be fairly similar to what you did I guess#2022-09-0900:23johnYeah, I'd be interested in helping out with a cljs port of this#2022-09-0916:06henrikRather than a port, I would love a CLJC, even if the CLJS part just contains scaffolding to begin with, subcontracting to cljs.core (where semantically equivalent, of course). This would provide an additional layer of generality as well as a baseline to test against.#2022-09-0916:09chrisnMy thought would be that you would need to write very directly to the js substrate and you would lose performance with cljs or cljc. This may not be true but that is my experience from clj/java - some pieces really do need to be written in Java.#2022-09-0916:10chrisnSo you would have a js library of datastructures and a cljs wrapper. Again, there is an assumption here but if you are going to absolute top performance you need to make sure the cljs->js translation is perfect for that use case and I don't know that it is.#2022-09-0916:10henrikI'm sure, but would that change the surface verbs: group-by-reduce, etc.?#2022-09-0916:11chrisnOh no it wouldn't. I see what you mean now.#2022-09-0916:13henrikThe key would be to go CLJC at the level where there's semantic equivalency. At that level, test suite should be reusable for both even.#2022-09-0916:14chrisnYes- speaking of test suite - I could use help there.#2022-09-0916:17borkdudeRewriting the core data structures and core functions in JS would have tree-shaking benefits with #cherry too - currently we're trying to figure out how to make the Google Closure output tree-shakable but it's very hard#2022-09-0916:18henrikMaybe it's possible to plain steal some parts from the Clojure test suite where applicable. https://github.com/clojure/clojure/blob/master/test/clojure/test_clojure/vectors.clj#2022-09-0916:18borkdudeThe idea is to have a once-optimized compiled version of CLJS core which we can then re-use to build upon, so you can continue tree-shaking with esbuild#2022-09-0916:19chrisnThe vectors test suite is a great start. I thought the google clojure compiler did the tree shaking.#2022-09-0916:20johnI'd like to see a persistent data structure lib that can read and write to wasm memory, such that one day when the JVM runs on WASM, we can synchronously bang on the same structure from both CLJ and CLJS#2022-09-0916:20borkdude@UDRJMEFSN google closure does whole-program optimization, but the output isn't compatible with es6 treeshakers, so you can't re-use that beyond the context of an application#2022-09-0916:21chrisngot it.#2022-09-0916:24borkdudeDon't know if you're aware but recently I found this approach to immutability in JS: https://github.com/immerjs/immer#2022-09-0916:24borkdudeTheir objects are 100% compatible with JS interop, so you don't have to do conversions which are often expensive.#2022-09-0916:25borkdudeMore on their performance: https://immerjs.github.io/immer/performance/#2022-09-0916:25borkdudeThey "freeze" their objects in development, to protect you from accidentally mutating, but they elide that in production#2022-09-0916:28chrisnThey use a sort of transactional model with copy-on-write within the transaction. Once copied within a transaction there is no need to copy further. That is a sort of interesting twist similar to transients.#2022-09-0907:45Cam SaulMethodical 0.14.0 is out. https://github.com/camsaul/methodical/releases/tag/0.14.0 Methodical is a multimethod library that acts like a drop-in replacement for defmulti and defmethod, written entirely in Clojure. It supports building multimethods programatically in a nondestructive/functional manner; methods with "partial-default" dispatch values like [:some-keyword :default]; CLOS-style :before, :after, and :around aux methods, and method combinations; easy next-method invocation; and ships with helpful debugging tools. Methodical 0.14.0 introduces several major improvements, including: • Bundled clj-kondo config now triggers errors when you're calling next-method with the wrong number of args • Added describe facility to generate Markdown-formatted documentation about a multimethod and all of its method implementations. Adding or removing methods automatically updates the docstring for a multimethod and adds this extra information. • Methodical defmulti s now support a :dispatch-value-spec that will be used to validate the dispatch value form in defmethod s at macroexpansion time • Methodical multimethods now implement datafy • You can now add docstrings to defmethod forms; this documentation is automatically added to the multimethod and included in describe output • More syntax errors to defmethod and defmulti are caught at macroexpansion time#2022-09-1208:55ingesolI would really love for this to support CLJS, but I totally understand that you are not motivated to work on something you don’t personally need.#2022-09-0912:41plexusWe've released the first alpha of lambdaisland/launchpad, a Clojure/nREPL dev process launcher https://github.com/lambdaisland/launchpad Launchpad is mainly created with multi-module (monorepo or multi-repo) projects in mind. It integrates with lambdaisland/classpath to provide hot reloading of deps.edn for any of the referenced projects.#2022-09-0912:59borkdudeLooks like it could be interesting to add #babashka-bbin support to launchpad https://github.com/babashka/bbin#2022-09-0912:59borkdudecc @U0CLCL6T0#2022-09-1016:15radsThanks for the heads up. Looks like a cool project#2022-09-0912:54borkdudeA new version of #nbb: Scripting in Clojure on Node.js using SCI Run npx nbb to get a Clojure REPL anywhere Node.js is installed! 🎉 The last announced version here was 0.6.122. We're at 0.7.133 now. Major new features: • Support :deps in nbb.edn - thanks https://github.com/lilactown! • Malli compatibility • https://github.com/babashka/nbb/issues/247: Include all remaining goog.object functions • https://github.com/babashka/nbb/issues/252: IPrintWithWriter support Many other bugfixes, https://github.com/babashka/nbb/blob/main/CHANGELOG.md Channel: #nbb Repo: https://github.com/babashka/nbb#2022-09-0913:17pezWill these wonderful things be straightforward to add to #joyride as well?#2022-09-0913:31borkdude@U0ETXRFEW yes!#2022-09-0922:04uochanJust released vim-iced ver 3.12.3144, Clojure Interactive Development Environment for Vim8/Neovim. https://twitter.com/uochan/status/1568359300577521664#2022-09-1022:05ambrosebsAnnouncing two new takes on old functions: https://frenchy64.github.io/fully-satisfies/latest/io.github.frenchy64.fully-satisfies.somef.html#var-somef and https://frenchy64.github.io/fully-satisfies/latest/io.github.frenchy64.fully-satisfies.everyp.html#var-everyp. Dependency information: https://github.com/frenchy64/fully-satisfies#dependency I wrote a brief history of some-fn and every-pred that helps explain and motivate these functions, and leaves you with some brain teasers: https://blog.ambrosebs.com/2022/09/10/unrolling-some-fn-every-pred.html#2022-09-1022:12Ben SlessAdding another question to the post: Could find a way to not unroll it manually? Is there a combinator for that?#2022-09-1023:01ambrosebsThanks yes, Rich Hickey proposed that question 10 years ago in the same post https://groups.google.com/g/clojure-dev/c/iZNJxqm1JuA/m/35kjl_1F2xUJ#2022-09-1023:27Noah BogartYou’re on a roll with these posts#2022-09-1105:13Ben Sless@U055XFK8V I actually contributed something close to malli https://github.com/metosin/malli/blob/master/src/malli/impl/util.cljc#L50#2022-09-1113:51ambrosebs@UK0810AQ2 brilliant!#2022-09-1113:57ambrosebslooks like you need the base case configurable: this should be false in Clojure:
((-some-pred [])) ;=> true
#2022-09-1116:58Ben Slesswhat I'd give for a multi-pass inlining compiler#2022-09-1118:28Noah Bogart> The proposal to fix this was rejected, so we’re left without a neat end to this story. Bummer.#2022-09-1101:08ambrosebsAnnouncing https://frenchy64.github.io/fully-satisfies/latest/io.github.frenchy64.fully-satisfies.clearing-future.html#var-clearing-future, an implementation of Clojure Futures that https://clojure.atlassian.net/browse/CLJ-2619. Dependency information: https://github.com/frenchy64/fully-satisfies#dependency Blog post: https://blog.ambrosebs.com/2022/09/11/futures-memory-leak.html#2022-09-1213:52eggsyntaxThanks for the tons of interesting writing and releases in the past week or so!#2022-09-1214:31ambrosebsthanks @U077BEWNQ, appreciated!#2022-09-1214:44dchelimsky[ANN] Cognitect Labs’ aws-api 0.8.589 https://groups.google.com/g/clojure/c/4IcauQMQHz4/m/XECSnPdoDAAJ#2022-09-1308:34slipsethttps://clojars.org/clj-commons/clj-yaml is released at version 0.7.110 with a bump of snake-yaml to 1.32 in order to avoid a CVE on that dep. Thanks to @danielcompton for the PR!#2022-09-1511:06borkdudeSCI, Configurable Clojure interpreter suitable for scripting and Clojure DSLs SCI is used in #babashka, #nbb, #clerk viewer functions, #clj-kondo hooks, #joyride, and many more projects. v0.4.33: The full changelog can be found https://github.com/babashka/sci/blob/master/CHANGELOG.md#v0433 This release contains a lot of improvements and bug fixes, mostly in the area of error reporting. Channel: #sci#2022-09-1516:44radsbbin: Install any Babashka script or project with one command Intro Post: https://radsmith.com/bbin GitHub: https://github.com/babashka/bbin Slack: #babashka-bbin Reddit: https://www.reddit.com/r/Clojure/comments/xf1i4m/bbin_install_any_babashka_script_or_project_with/ Today I'm excited to share bbin, a tool that makes it easy to install Babashka scripts and projects on your system PATH. Even though the project is just getting started, it's already very useful! Check out the https://github.com/babashka/bbin/wiki/Scripts-and-Projects page for examples of tools that you can already install out-of-the-box#2022-09-1517:26Eugenlooks awsome, I will try it out when I get some time#2022-09-1606:01plexusWe cut a first release of lambdaisland/nrepl-proxy, an nREPL introspection and debugging tool. It sits in between an nREPL client and server and prints out the messages that are going back and forth. https://github.com/lambdaisland/nrepl-proxy#2022-09-1606:01plexusExample output:
nil ---> 1 clone {}
J <=== 1 #{:done} {:new-session "002914a8-db79-408d-807a-c5b3955ab6f9"}
nil ---> 2 clone {}
X <=== 2 #{:done} {:new-session "6a7e7b99-1b8e-4008-bbe5-ddddf46672a9"}
Y ---> 3 describe {}
Y <=== 3 #{:done} {:aux {:current-ns "user"}, :ops {:stdin {}, :add-middleware {}, :lookup {}, :swap-middleware {}, :sideloader-start {}, :ls-middleware {}, :close {}, :sideloader-provide {}, :load-file {}, :ls-sessions {}, :clone {}, :describe {}, :interrupt {}, :completions {}, :eval {}}, :versions {:clojure {:incremental 3, :major 1, :minor 10, :version-string "1.10.3"}, :java {:version-string "17"}, :nrepl {:incremental 0, :major 0, :minor 9, :version-string "0.9.0"}}}
Y ---> 4 eval {:nrepl.middleware.print/buffer-size 4096, :file "*cider-repl lambdaisland/nrepl-proxy:localhost:5424(clj)*", :nrepl.middleware.print/quota 1048576, :nrepl.middleware.print/print "cider.nrepl.pprint/pprint", :column 1, :line 10, :code "(clojure.core/apply clojure.core/require clojure.main/repl-requires)", :inhibit-cider-middleware "true", :nrepl.middleware.print/stream? "1", :nrepl.middleware.print/options {:right-margin 80}}
G ---> 5 eval {:code "(seq (.split (System/getProperty \"java.class.path\") \":\"))"}
Y <--- 4 #{:nrepl.middleware.print/error} #:nrepl.middleware.print{:error "Couldn't resolve print-var cider.nrepl.pprint/pprint"}
Y <--- 4 #{} {:value "nil"}
Y <--- 4 #{} {:ns "user"}
Y <=== 4 #{:done} {}
#2022-09-1606:57pezOMG. Yesterday I asked on the REPL-y repository if I could have a log like this from it. https://github.com/trptcolin/reply/issues/210 IIuc, you just solved it, in the most elegant and composable way. Thanks! 🙏 ❤️#2022-09-1607:23robert-stuttafordbeautiful!#2022-09-1607:25plexusIt's been around for a year, @U051BLM8F just had to poke me to put out a release.#2022-09-1608:22borkdude@U07FP7QJ0 This is very useful for reverse engineering the nREPL protocol or rather, implementations thereof -- thank you!#2022-09-1608:39bozhidarI've also mentioned nrepl-proxy on the nREPL site, so that people would find it easier https://nrepl.org/nrepl/building_clients.html#debugging-the-communication-with-nrepl#2022-09-1608:40borkdudeThe deployed jar file doesn't contain any .clj files:
$ ls_jar.clj /Users/borkdude/.m2/repository/com/lambdaisland/nrepl-proxy/0.1.4-alpha/nrepl-proxy-0.1.4-alpha.jar
META-INF/MANIFEST.MF
META-INF/
META-INF/maven/
META-INF/maven/com.lambdaisland/
META-INF/maven/com.lambdaisland/nrepl-proxy/
META-INF/maven/com.lambdaisland/nrepl-proxy/pom.xml
META-INF/maven/com.lambdaisland/nrepl-proxy/pom.properties
#2022-09-1608:46borkdude@U07FP7QJ0 hence, I can't use it ;)#2022-09-1608:46borkdudeof course I could just use it as a git dep#2022-09-1609:02plexushmmm let me see#2022-09-1609:05plexusa bug in our lambdaisland/open-source release tooling. How can it be! https://github.com/lambdaisland/open-source/pull/11#2022-09-1609:06borkdudeIt happens :)#2022-09-1609:08plexusok, looks better#2022-09-1609:10borkdude(https://twitter.com/borkdude/status/1570701560216424449)#2022-09-1609:10borkdudeI'll try, thanks plexus#2022-09-1609:16borkdudeNow made a bb script which wraps nrepl proxy and you can install it using bbin: https://github.com/borkdude/tools#nrepl_proxy
bbin install 
#2022-09-1609:20plexusoh excellent, I had not expected it to be babashka compatible#2022-09-1609:22borkdudeit isn't#2022-09-1609:22borkdudethis is just a CLI wrapper which executes clojure#2022-09-1609:22plexusah I see#2022-09-1609:24pezAwesome, @U04V15CAJ! As I just had a need to see the logs when using REPL-y, I think ”your editor” is a bit limiting in the usage string. But maybe it is still less mysterious than ”your nREPL client”...#2022-09-1609:30borkdude@U0ETXRFEW updated#2022-09-1610:56pezThere's a new #calva version in town. Rather a lot of changes since un update was last announced. Here's the latest: https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.301 • Fix test running issue: https://github.com/BetterThanTomorrow/calva/issues/1821https://github.com/BetterThanTomorrow/calva/issues/1843 For users of #joyride (and VS Code extension developers): This Calva build also has some new API. • There's an calva/editor.replace. function that will replace a range in a document with the new text you provide. See https://calva.io/api/#editor. • A calva/pprint.prettyPrint function will take a string with Clojure code/data and return a string with a prettier version of the same code. See https://calva.io/api/#pprint. #2022-09-1614:04Daniel JomphePersonally I fail to understand what is new for the end-user about formatting. We could already TAB before a form and have it reformatted. Is it just that we can, with this, use a different tool behind the scenes to reformat some selections/forms?#2022-09-1614:19pezThanks for asking this! It is subtle until you have the use case. 😃 In the issue linked above (all Calva Changelog items link to issues with the problem statement) there is a link to a question on Clojure Ask: https://ask.clojure.org/index.php/12126/there-way-place-elements-collection-vertically-with-calva It's about that the Calva formatter won't turn this:
[[1 2 3] [4 5 6] [7 8 9]]
Into this:
[[1 2 3]
 [4 5 6]
 [7 8 9]]
This is by design, but we still sometimes have the need to do this kind of formatting. That is what this new command does. (If your pretty printer settings are configured to break lines that short.) It's just a first version of the feature, it might turn a bit more versatile going forward. Does this answer your question?
#2022-09-1614:20pezI should have narrated the screencast... 😃#2022-09-1614:41Daniel JompheOh, I see, so this lays the ground work so we could e.g. cycle through different config sets for reformatting stuff differently. Let me then say: neat! :star-struck: 🙏:skin-tone-3: Thanks for this and the explanation!#2022-09-1911:47Jakub Holý (HolyJak)awesome, I was missing formatting of data for a long time...#2022-09-1913:12pezCool! The key here is static formatting of data. We've been able to do it with the REPL all this time, but that isn't always a feasible option.#2022-09-1614:20Felipe ReigosaHey guys, MockMechanics (the sandbox mechanical building game/visual programming language) is now officially open source. It's written and scripted (optionally) in clojure. There is a visual way to program the things you build but using clojure as an scripting language is also an option, so you could build a robot hand like the one in the video (it's very easy, kind of building it with lego) and then use clojure to make it pick up objects and so on. https://github.com/felipereigosa/mock-mechanics There's also the channel where I post the things I build (and if you build something send it to me and I will consider adding it there). https://www.youtube.com/c/MockMechanics#2022-09-1614:22eggsyntaxThanks for open sourcing it! I remember thinking it was really cool when you first posted about it, and it looks even cooler now! 🎉#2022-09-1614:28Felipe Reigosa@U077BEWNQ Thanks :)
#2022-09-1614:33pezThanks for open sourcing this, @U01JSRSH4V7! It is an amazing and generous gift!#2022-09-1614:37Felipe ReigosaNo problem @U0ETXRFEW :)#2022-09-1614:47refsetThis is the best advert for Clojure I've ever seen 👏 (the vibe, if not the language itself)#2022-09-1615:42robert-stuttafordi love this community. people are doing SUCH COOL SHIT!#2022-09-1618:08Felipe Reigosa@U899JBRPF @U0509NKGK Thanks guys!#2022-09-2218:52AkizThis is probably the coolest Clojure project I have ever seen. KUDOS#2022-09-2219:31Felipe ReigosaThanks @UBRV1HXPD, you are too kind.#2022-09-2219:43pezAre the call for papers for the next Conj closed? I would just love to see you present this project and the ideas behind it.#2022-09-2221:41Felipe Reigosa@U0ETXRFEW Really? Thanks. Someone else asked me just the other day about the experience and history behind the project. I'm not sure if I would like to present it though, we'll see, if someone invites me to speak at something I'll think about it.#2022-09-2304:41pezHere’s hoping someone invites you to speak!#2022-09-1614:37borkdudeQuickdoc: Quick and minimal API doc generation for Clojure v0.1.1 • https://github.com/borkdude/quickdoc/issues/14: Skip vars defined in comments • https://github.com/borkdude/quickdoc/issues/18: Quickdoc ignores arglists metadata • https://github.com/borkdude/quickdoc/issues/17: Change toc var descriptions to be the first sentence of their doc https://github.com/borkdude/quickdoc Channel: #quickdoc#2022-09-1718:23eggsyntaxNice! Thanks 🙂#2022-09-1918:33metasoarousThis is great! But would it be possible to have the source inline in a <details> tag? I'd find that more convenient than having to hit github.#2022-09-1918:35borkdudeI think it could be done, but the source has to be extracted manually. Here is a snippet for that: https://github.com/clj-kondo/clj-kondo/wiki/Analysis-tips-and-tricks#getting-the-source-for-usage-of-a-var I'm open to a PR for this#2022-09-1703:45ambrosebsTyped Clojure 1.0.32 Adds type-level map merging, like spec's s/merge or malli's :merge except lifts clojure.core/merge's type checking semantics to type level.
(t/Merge '{:a t/Int} '{:b t/Int}) => '{:a t/Int :b t/Int}
(t/Merge '{:a t/Int} '{:a t/Bool}) => '{:a t/Bool}
Thanks to @ciccio for the suggestion. https://www.patreon.com/posts/72093965 https://github.com/typedclojure/typedclojure/blob/main/CHANGELOG.md#1032-20220917 Channel: #core-typed
#2022-09-1819:12Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1165: • https://clojure.atlassian.net/browse/TDEPS-165 Adds new CLJ_JVM_OPTS env var that can be used to set jvm opts on the internal processes that build classpaths • Adds support for the common JAVA_OPTS for setting jvm opts on user programs#2022-09-1819:36borkdudeAlso released a new deps.clj: https://github.com/borkdude/deps.clj/blob/master/CHANGELOG.md#changelog#2022-09-1823:05uochanJust released antq ver 2.1.920 Tool to point out your outdated dependencies. https://github.com/liquidz/antq Added support for link to changelogs :)#2022-09-1907:03plexusWe released Kaocha 1.70.1086, containing a few bug fixes. This is the 10th Kaocha release this year.#2022-09-1907:03plexusDetails as always in the CHANGELOG https://github.com/lambdaisland/kaocha/blob/main/CHANGELOG.md#2022-09-1908:16plexusNote that in this release we've switched from deep-diff to deep-diff2, and this can cause issues for other projects assuming that kaocha pulls in deep-diff. I'm upgrading kaocha-cljs now, we'll also have to make a new release of kaocha-cljs2. In the meanwhile adding an explicit dependency on deep-diff might help.#2022-09-1908:19plexus
[com.lambdaisland/kaocha-cljs "1.3.127"]
{com.lambdaisland/kaocha-cljs {:mvn/version "1.3.127"}}
#2022-09-1911:27dchelimskyCognitect Labs’ aws-api https://groups.google.com/u/2/g/clojure/c/H38WznsIKu0 • upgrade to org.clojure/data.xml 0.2.0-alpha8. Fixes https://github.com/cognitect-labs/aws-api/issues/205#2022-09-2010:07borkdudeProcess 0.1.3-0.1.8: Clojure library for shelling out / spawning subprocesses Repo: https://github.com/babashka/process Channel: #babashka • https://github.com/babashka/process/issues/84: fix tokenize with single-quoted strings inside double-quoted string • https://github.com/babashka/process/issues/76: error while loading babashka.process with older GraalVM libraries • https://github.com/babashka/process/issues/72: exec arg0 should be the program name by default • https://github.com/babashka/process/issues/73: support for Clojure 1.9 • Add shell function that behaves similar to babashka.tasks/shell • Support string as value for :out and :err for writing to file#2022-09-2103:19quollClormat 0.0.1 A clean reimplementation of Repo: https://github.com/quoll/clormat This covers some of the basic functionality of the format function, specifically for ClojureScript. It's an initial release, covering positional parameters, along with several of the datatypes and flags. Significantly, it is still missing floating point formats and date/times, but these are in progress. The function aims for clojure.core/format compatibility wherever possible.#2022-09-2104:10Cora (she/her)so cool!!#2022-09-2104:13quollIt's ridiculously finicky#2022-09-2104:20quollLike, what should this return?
(format “%,(010d” -101)
I thought maybe ”(000,101)” because it can't be ”(,000,101)” but it turns out that prefixing zeros don't get grouped, even though the NumberFormat classes on both Java and JavaScript DO group prefixing zeros
#2022-09-2104:22Cora (she/her)matching behavior like this is so hard. thanks for doing it 💜#2022-09-2104:22quollOr… how should -1 be represented in hex? It can't be 64 bits wide because integers on JavaScript are only 52 bits wide#2022-09-2104:23Cora (she/her)oh god I didn't even think of that#2022-09-2104:23quollI did say “ridiculously finicky”#2022-09-2104:24Cora (she/her)an understatement, I'm sure#2022-09-2104:24Cora (she/her)if anyone can figure it out, though, it's you#2022-09-2104:26quollOne thing I haven't put a lot of effort into though is incompatible flag combinations #2022-09-2104:26Cora (she/her)how do you mean?#2022-09-2104:29quollFor instance, ”%-010d” says to print a number at least 10 characters wide, left-justified, with leading zeros to make up the width. But if it's left-justified then there can't be any leading zeros#2022-09-2104:30quollIf there are leading zeros then it will take up the whole width and left/right justification won't matter#2022-09-2104:31quollYou know… that kind of thing 🙃#2022-09-2104:32quollOn the plus side, I know much more about formatting text strings than ever before!#2022-09-2104:34Cora (she/her)this just in: found the text formatting goddess#2022-09-2104:34Cora (she/her)I get paralyzed with those kinds of choices tbh#2022-09-2104:35Cora (she/her)and in the end devs need to be aware of at least some of it#2022-09-2104:35Cora (she/her)write once, run anywhere: a god damn lie from the start#2022-09-2107:44Lennart BuitProgramming in a nutshell: You are walking down the street only to fall in a little pothole that ends up being 3km deep and require a thorough study of spelunking to get out again.#2022-09-2109:46pez> An implementation of the cljs.core/format function for ClojureScript. Also runs (redundantly) in Clojure. Not sure how I should read this. Should it say an implementation of the clojure.core/format function?#2022-09-2110:07quollWell it's trying to be an implementation of the missing cljs.core/format function #2022-09-2110:23pezThat's awesome. Maybe say that in the README? 😃#2022-09-2110:26pezAlso, is clormat a play with the name of cljs.pprint/cl-format?#2022-09-2111:29Noah BogartAre you trying to do this without reading the openjdk source?#2022-09-2112:07quollYes, I am 🙂#2022-09-2112:08quollThe name was probably informed by the existence of cl-format, but I was just thinking “CLojure fORMAT”#2022-09-2112:17Noah BogartThat’s cool and a much harder task lol. Makes sense for licensing reasons if you want to upstream it; you’re a champ for doing this#2022-09-2616:42bherrmannfinicky looks like fn-hickey (aka function by Rich Hickey)#2022-09-2616:44quollYes… very finicky. I’ve been exploring more, and I now have more info to make it better for localization (correcting expanding with zeros, etc)#2022-09-2616:45quollEvery allowable zero: 0٠༠০०۰၀๐᱐#2022-09-2616:45quollDepending on the country and language setting#2022-09-2616:53pezIs it supposed to format numbers and things according to locale? If so I could have a look at the Swedish.#2022-09-2616:54quollIt’s defined to work against the current default locale, which I have yet to figure out how to set during testing 🙂#2022-09-2616:54quollThere are relatively consistent rules to follow regardless of locale, but not all of it is apparent#2022-09-2616:56quollExpand with 0s varies according to the number system in use (see the earlier message). Group separators are an issue as well, since they also vary with the numbering system#2022-09-2616:56quollSomewhat ironically, Arabic does not use the numbers we call “arabic” 🙂#2022-09-2616:57quollFor instance, the number 1234 in one form of arabic is: ١٬٢٣٤#2022-09-2616:58quollThe second character is the group separator. European countries are easy enough for me: UK: “1,234”, FR: “1 234", GE: “1.234”#2022-09-2617:00Lennart BuitAlthough the Dutch uses comma for decimals, and dot for thousands. Exactly opposite of Americans. This has never lead to input confusion for me-as-a-Dutchie #2022-09-2617:12quollThese things are easy, since the digits are all the same#2022-09-2617:16quollHere are all the possible outcome for (format "%,d" 1234):
"1,234"
"1.234"
"1234"
"1 234"
"1’234"
"١٬٢٣٤"
"۱٬۲۳۴"
"१,२३४"
"১,২৩৪"
"๑,๒๓๔"
"༡,༢༣༤"
"၁,၂၃၄"
#2022-09-2617:26quollExtra notes: • clojure.core/format wraps java.lang.String/format which does not accept a locale. This means that it always select the current default, and you cannot control it on this function. • You can control it on the JVM, via: (String/format (Locale/forLanguageTag "sv") "%,d" (object-array [1234])) • You can do the same on JS via: (.format (js/Intl.NumberFormat. "sv" #js{:grouping: true}) 1234) • This is for the trivial case of a pattern of "%,d". More detailed cases cannot be formatted via the locale settings, and require manual intervention. For instance, when using "%,010d" then using locale formatting to ask for 10 digits in the UK will give an output of: "0,000,001,234". However, the format function actually outputs: "000001,234". Note how the localization groups the zeros, but the format does not?#2022-09-2617:31quollI’m just scratching the surface here#2022-09-2617:32quollIt gets hairier 🙂#2022-09-2107:47Ivar Refsdalclj-paginate 0.2.52 Fast pagination of vectors and maps with Clojure for GraphQL. Easily handles vectors with 10M entries. Repo: https://github.com/ivarref/clj-paginate This release adds support for :sort-fn and with that custom ordering (ascending/descending) of attributes. https://github.com/ivarref/clj-paginate#descending-values-example. It's backwards compatible with the previous release.#2022-09-2112:37jpmonettas[ANN] FlowStorm Clojure[Script] debugger 3.0 is out FlowStorm is a Clojure and ClojureScript debugger with some unique features. Version 3.0 has been redesigned to be much simpler and more extensible. It goes from being a debugger to being a platform for building debuggers + a reference implementation. Most remarkable new features for this version are : • ClojureScript is feature par with Clojure now, so every feature is available to both languages. • Remote debugging can be accomplished by just connecting to a nrepl server (socket repl support on the roadmap) • A programmable API. This means debug your code by writing Clojure code that uses the debugger infrastructure. See (https://jpmonettas.github.io/flow-storm-debugger/user_guide.html#_programmable_debugging) • Opens the possibility for future integration with IDEs/editors Github repo : https://github.com/jpmonettas/flow-storm-debugger/ User Guide https://jpmonettas.github.io/flow-storm-debugger/user_guide.html Big thanks to Roam Research (https://roamresearch.com/) for sponsoring the project! If you have any questions please show up on #flow-storm in clojurians slack PD : I'm planning to make some videos on how to use FlowStorm to debug different kinds of applications (web apis, re-frame SPAs, etc) I hope you find it useful. Cheers!#2022-09-2216:29Lidor Cohen👏 👏 👏 Been waiting for this thank you so much! 🙏#2022-09-2216:34jpmonettasyou are welcome! if you have any questions show up in #flow-storm!#2022-09-2217:33jpmonettasfor people that tried it for ClojureScript and was annoyed by having to reconnect the debugger by hand when reloading a browser page or restarting the shadow repl just released 3.0.188 which does automatic connection management. It also shows the connection status for the repl and the runtime on the bottom right corner#2022-09-2213:29borkdudeGrasp: Grep Clojure code using clojure.spec regexes: v0.1.4 https://github.com/borkdude/grasp#2022-09-2219:05borkdudeBabashka CLI: turn functions into CLIs!: v0.3.33-0.4.37 https://github.com/babashka/clihttps://github.com/babashka/cli/issues/39: handle :exec-args with false default • Be tolerant of tags in clojure.basis • Added :error-fn to handle errors (https://github.com/jmglov) • Merge :spec options with additional "terse" options • Added :require to throw on missing options • Added :validate to throw on invalid options • Support parse-opts options in dispatch table entries • Add :args->opts in parse-opts to consume positional arguments as options#2022-09-2303:50ambrosebshttps://github.com/frenchy64/fully-satisfies 1.7.1 • fix every-pred/`some-fn` variants to be operationally equivalent to (every? #(every? % args) preds) and (some #(some % args) fs) as previously advertised (https://blog.ambrosebs.com/2022/09/10/unrolling-some-fn-every-pred.html, https://github.com/frenchy64/fully-satisfies/issues/6) • improve "Uncaught exception, not in assertion" error message when running tests in parallel (https://blog.ambrosebs.com/2022/09/08/clojure-test-uncaught.html, https://github.com/frenchy64/fully-satisfies/commit/e3ee48926c9105d030e04befdabebe3965b2e999) https://github.com/frenchy64/fully-satisfies#dependency https://github.com/frenchy64/fully-satisfies/blob/main/CHANGELOG.md#171---22nd-september-2022#2022-09-2319:58blueberryJust published new draft 0.29.0 of Deep Learning for Programmers 2.0 https://aiprobook.com/deep-learning-for-programmers/?release=0.29.0#2022-09-2321:57jsa-aerialHi Dragan - I've been confused by this before. I don't see a variant of this for the tier 1 subscribers. Is this (dlfp2-draft-0.29.0-2.0) the successor to dlfp-draft-0.26.0 or is there a new one for that variant as well?#2022-09-2916:38blueberry@U06C63VL4 Tier 1 subscribers automatically get all new stuff.#2022-09-2916:44blueberryI've published a post that I hope clarifies this: https://www.patreon.com/posts/72639212?pr=true#2022-09-2916:47blueberry@U06C63VL4 Tier 1 subscribers should see the new versions. Is it is not the case, please contact me to fix this.#2022-09-2920:37jsa-aerial@U086AG324 OK, what I now see is dlfp-1.0.0.pdf, dlfp2-draft-0.30.0-2.0.pdf, and dlfp3-draft-0.30.0-3.0.pdf. Before (when I started this thread) I only was seeing dlfp2-draft-0.29.0-2.0.pdf. Could have been a stale browser page. Even so, I still am confused about this. First, the 1.0.0 (which was released 2-Sep-2021 - over a year ago), has much more stuff in it than the other two (in terms of actual content), but 2-draft-0.30.0-2 and 3-draft-0.30.0-3 both have some extra stuff in the TOC: "VGG: a non-trivial CNN example" and a new chapter "VIII Recurrent networks". Now neither of these has any content for the example nor the new chapter. So, it looks like 1.0 branch is no longer being updated. And that the 2.0 and 3.0 branches will have the new stuff. But at the moment, there isn't any new stuff - unless the previous chapters and sections that overlap with 1.0 have had updates not in 1.0. I think this is the confusing thing - it looks like all three of these may be needed to get the complete content. If not now, certainly in the (near?) future when the content for VGG example and the RNN chapter is filled in. And maybe for changes, corrections to the previous content is made.#2022-09-2923:00blueberryThe 2.0 and 3.0 versions have smaller changes and fixes and the code is up-do-date with DD 0.25.0. The new chapters are going to be added to this. v1.0.0 is final and there won't be changes added to it. You of course have access to all this material in v1.0.0 but for v2.0 tiers these are new updates.#2022-09-2409:51Ben Sless[ANN] https://github.com/bsless/datalog-parser.spec https://clojars.org/io.github.bsless/datalog-parser.spec/versions/0.0.4, https://github.com/bsless/datalog-parser.malli https://clojars.org/io.github.bsless/datalog-parser.malli/versions/0.0.6 These libraries implement the query, rule and pull grammars as they appear in the official Datomic documentation, with clojure.spec and malli respectively, and let the user emit fully conformed queries Ideally, the spec based library would be used as a correct reference point for other parsers, where the malli parser is an example of a high-performance compliant implementation.#2022-09-2423:33ericdalloReleased https://github.com/ericdallo/deps-bin - A Clojure library that generate an embeddable jar executable from a jar to be used from deps.edn. • This release adds support for Windows thanks to @chaos (@ikappaki)#2022-09-2502:31ambrosebshttps://github.com/dm3/clojure.java-time 1.0.0 New Features • Previously, Intervals were only allowed to the left of Instants in {before,after}?. Now they can be freely intermixed. Fixed • #78(liquidz): Add missing chrono fields (v0.3.3 has breaking changes) • #81(terop): Remove clj-tuple - no advantages over Clojure vector anymore • #52: Fix before/after on Intervals • #83(imrekoszo): Exclude clojure.core/abs Enhancements • add docstrings to all java-time fns • support clj-kondo in java-time ns by adding :arglists to all vars https://clojars.org/clojure.java-time/versions/1.0.0 https://github.com/dm3/clojure.java-time/blob/master/CHANGELOG.md#100#2022-09-2506:06borkdudeWould you consider introducing a multi segment namespace and deprecating the single namespace one?#2022-09-2506:07borkdudeThe single one makes it harder to use this library with GraalVM native image. See https://github.com/clj-easy/graal-build-timeand specifically this: https://github.com/clj-easy/graal-build-time#single-segment-namespaces#2022-09-2516:17mikerodNo more abs warnings is a beautiful thing. #2022-09-2519:34ambrosebs@U04V15CAJ yes, especially since the single segment ns is auto-generated anyway. java-time.api seems like a good name. Opened https://github.com/dm3/clojure.java-time/issues/91#2022-09-2519:34ambrosebs@U0LK1552A quite a journey, but we've arrived xD#2022-09-2519:41borkdude@U055XFK8V Usually it's best to choose a unique prefix so your lib won't conflict with other libraries in that area. java-time is a bit generic, but it does solve the graalvm problem. Thanks#2022-09-2520:01ambrosebsyes, unfortunately all the implementation is under java-time.* and that cannot be moved (due to public protocols). I probably have to operate on the assumption that this package prefix is unique.#2022-09-2512:51vlaaadI'm happy to announce a first release of #cljfx dev tools — https://github.com/cljfx/dev https://github.com/cljfx/cljfx is a declarative, functional and extensible wrapper of JavaFX inspired by better parts of react and re-frame. Cljfx dev tools are a set of tools that help with developing cljfx applications but should not be included into the production distribution of the cljfx app. Many thanks to https://www.clojuriststogether.org/ for funding this work!#2022-09-2816:25AkizDo you have any idea if your great library (cjfx) could somehow be applied to https://github.com/AlmasB/FXGL ?#2022-09-2610:57borkdudePeriodic reminder that we also have a #releases channel in which minor or more-frequent-than-once-a-month releases are announced! (This message is not targeted at any specific message that was posted here).#2022-09-2705:19ambrosebsCalling for early testers to try a spec for clojure.core/reify that has been https://clojure.atlassian.net/browse/CLJ-2661. Dependency: https://github.com/frenchy64/fully-satisfies#dependency https://github.com/frenchy64/fully-satisfies/blob/main/CHANGELOG.md#190---27th-september-2022 Code: Please inject a call to (io.github.frenchy64.fully-satisfies.reify-spec/register-reify-spec) before compiling your project.#2022-09-2906:23CrispinToday a new babashka pod is released: bbssh. ssh and scp support for babashka that interoperates with babashka.process: https://github.com/epiccastle/bbssh#2022-09-2914:29eval2020The new version of the https://gitlab.com/clojurians-zulip/feeds/-/tree/master#announce-an-event makes announcing a https://meetup.com or http://clojureverse.org event a breeze as it now scrapes all event-details for you:
$ zulip_events create --zulip-auth "${ZULIP_AUTH}" --url 
These announcements power the Clojure event calender-feed - see https://clojurians.zulipchat.com/#narrow/stream/262224-events/topic/README. Enjoy!
#2022-09-2915:58Daniel SlutskyFantastic, this is so valuable & helpful. 🙏#2022-09-2916:45blueberryJust published new draft 0.30.0 of Deep Learning for Programmers 2.0. All existing v1.0 subscibers also get all these new updates. https://aiprobook.com/deep-learning-for-programmers/?release=0.30.0#2022-09-2919:23borkdudeRewrite-edn: utility lib on top of #rewrite-clj with common operations to update EDN while preserving whitespace and comments. 0.3.4 • https://github.com/borkdude/rewrite-edn/issues/20: Bump rewrite-clj to v1.1.45 (https://github.com/lread) • https://github.com/borkdude/rewrite-edn/issues/19: Repeated assoc-in, assoc no longer throw NullPointerException (https://github.com/lread) • Add keys and get-in (https://github.com/witek) Repo: https://github.com/borkdude/rewrite-edn#2022-09-2922:02lreadclj-http-lite v1.0.13 - A JVM and babashka compatible lite version of clj-http Highlights from the https://github.com/clj-commons/clj-http-lite/blob/master/CHANGELOG.adoc#v1.0.13: • The :insecure? option is now applied only to the current request • If specified, request’s body encoding is now applied, else defaults to UTF-8 • User info from request URL now applied to basic auth • Nested query and form parameters are now automatically flattened • Now also automatically verified to work under Windows • Docs reviewed and updated clj-http-lite is one of the many projects under the loving care of https://github.com/clj-commons.#2022-09-3009:49borkdudedeps.clj : A faithful port of the clojure CLI bash script to Clojure v1.11.1.1165 catches up with the same version of the clojure CLI bash script with support for the new CLJ_JVM_OPTS and JAVA_OPTS environment variables. https://github.com/borkdude/deps.clj/blob/master/CHANGELOG.md#v11111165 deps.clj is used in Calva for the getting started environment and used in #babashkafor fetching dependencies. Since it's available as a jar file (and bb script and binary), you can just download that and run it without having anything else installed to get the same clojure CLI experience, which for some environments can lower the barrier of entry for getting up and running with Clojure!#2022-09-3010:00pezFor the record: Calva will use deps.clj whenever clojure is not installed. So it is not only for the dedicated Getting Started features. Granted, Calva does it this way to cut one step from the Getting Started with Clojure procedure.#2022-09-3012:19lreadThe binary is a great alternative to the clojure Powershell module if you are using (or testing on) Windows native. You can run deps.exe from any Windows shell and escape a layer of confusing command line escaping.#2022-09-3012:21lreadPro tip: if you are using babashka, it is effectively also available via bb clojure.#2022-09-3012:27pezI've never gotten clojure, the Powershell module, to work on my Windows machines. But deps.clj works, so I use that. 😃#2022-09-3012:29lreadSame for me for some command lines on Windows. For continuous integration testing, I boldly rename deps.exe to clojure.exe.#2022-09-3012:29lreadOr use bb clojure.#2022-09-3009:59bortexz• Released initial version of https://github.com/bortexz/tacos , a collection of timeseries technical analysis indicators as graphcom nodes. • Also added a rationale to https://github.com/bortexz/graphcom , hoping it better explains the why/what for this library, as well as linking to tacos as a use case.#2022-09-3010:53javahippieWe released a new version of clj-test-containers, a Clojure wrapper around testcontainers-java. It’s a maintenance upgrade to include the new testcontainers-java version which was released yesterday. https://clojars.org/clj-test-containers/versions/0.7.3#2022-09-3012:19Martynas MThis is a duplicate message from events channel but probably it's also a good idea to spam it here. I developed a web front-end for Clojure events calendar-feed: https://mmaciul.lt/cljcalendar/ This is seeded from the same calendar as https://clojurians.slack.com/archives/C06MAR553/p1664461794012249 (underlying event collection done by eval2020)#2022-09-3017:39seancorfieldIs it open source we can go look at?#2022-10-0101:16Martynas MIt's in my github: https://github.com/Invertisment/cljcalendar There is no google, no trackers, nothing. Just clean calendar. I haven't even written any readme 😄 I'll add some kind of license, I think#2022-10-0101:19Martynas MAnd credentials, of course. But I didn't bother with it yet.#2022-10-0101:35Martynas MDo you want to host it on some kind of proper domain? Why do you ask? Maybe I can answer something.#2022-10-0103:20seancorfieldI figured folks would want to see how it was built if it was public.#2022-10-0103:20seancorfield(and I was curious whether it was Clojure/Script or not)#2022-10-0108:42Martynas MWell... I wanted to use ClojureScript and re-frame. But then I decided that there is just too little code to be useful and relearn re-frame (I recreated a new project for this one about 5 times and then gave up). This is basically just library integration where types actually are useful quite a bit. i.e. this kind of UI is not state-heavy but integration-heavy. i.e. integration dominates this code.#2022-09-3013:33Ertugrul CetinHi all, I've developed a library called procedure.async, which provides async procedures for Clojure https://github.com/ertugrulcetin/procedure.async Why? • It'd be interesting to have re-frame's reg-sub like flow on the backend (we have reg-pro - register procedure) - which forces us to develop handlers in a certain way • reg-pros have dependencies (similar to reg-sub's :<- [:some-procedure-id]) and they realize asynchronously, so that gives some computational power • It allows a more natural way to keep frontend and backend code in the same file (.CLJC) • Frontend communicates via procedure's id directly (e.g. (dispatch-pro [:procedure-id payload-map]) - like dispatching re-frame event) • We can implement re-usable/high-level UI components in the same file with reg-pros, allowing us to have a close view of what is happening in a single unit • This design makes it easier to apply changes for both sides • Feels like Storybook for both frontend and backend!#2022-09-3016:38MattiasFor the uninitiated, what does procedure mean here? What context is the word from? Thanks! 😀#2022-09-3021:46Ertugrul CetinThe book SICP (one of the essential books in the LISP world), was calling functions to procedures 🙂#2022-09-3015:54hlshipio.aviso/pretty 1.2 Pretty prints things prettily; mostly, carefully formatted exception output using ANSI colors, smarter ordering, and name-demangling to take the pain out of figuring out what went wrong, and where. This release buffers the exception output until it is complete before printing; this helps greatly in multi-threaded environments as it keeps any exception output across multiple threads from getting interleaved in the console. https://github.com/AvisoNovate/pretty#2022-09-3016:20hlshipIf often wonder how many people use pretty vs. how many just get it as a transitive dependency from other tools and libraries? It's up over 13M downloads across all versions, and 630K downloads just for version 1.1.1.#2022-09-3016:45phronmophobicIt wouldn't be too much work to find that out. Clojars has some pretty good data resources, https://github.com/clojars/clojars-web/wiki/Data. If you just look at the top level dependents, https://clojars.org/io.aviso/pretty/dependents, it seems like timbre is major user, but you would probably have to start downloading poms to try and figure out what might be pulling in the latest version.#2022-09-3016:49phronmophobicAt some point, I did some analysis comparing clojars downloads to github stars and there's some interesting outliers, https://clojurians.slack.com/archives/C8V0BQ0M6/p1648936381720099?thread_ts=1648735337.140649&amp;cid=C8V0BQ0M6#2022-09-3016:49phronmophobicFor example, https://clojars.org/crypto-equality has 22 github stars, but almost 18 million downloads#2022-09-3023:13magnarsParens of the Dead Seven years ago there was a hectic little screencast where I coded a game, like, so very quickly. This time I'm joined by @christian767 to do something hopefully a bit more entertaining, useful and informative. The first two episodes are out as we speak. More to come every Friday. ☀️😊 https://www.parens-of-the-dead.com#2022-09-3023:20seancorfieldGreat to see this "come back from the dead" so to speak! If you want to announce new episodes as they appear, consider posting in #news-and-articles as this channel -- #announcements -- is primarily intended for major project/library announcements.#2022-09-3023:21magnarsExcellent, thanks for the pointer. I'll join there at once. 🙂#2022-09-3023:28ChaseOh cool! I stumbled on those older screencasts early in my developer and clojure journey and thought it was so cool. I admired the proficiency and it made me want to up my skills too.#2022-10-0108:11robert-stuttaford@U07FCNURX i have always loved this and shared it with everyone who's learning. so great to see it getting an update!#2022-10-0108:55magnarsThanks, @U0509NKGK! That's great to hear. ❤️ I think this version might be better suited for learners also, since it's not so frantic, and there's more conversation.#2022-10-0215:40FlowI’ve written here about secrets.clj already, a year or two ago. But I’ve improved things since then, so may be someone will find it useful. https://github.com/lk-geimfari/secrets.clj designed to generate random numbers suitable for security purposes. It has API which is similar to Python’s https://docs.python.org/3/library/secrets.html module:
user=> (sc/token-hex 32)
"2aa5430064918acf140bb423678cef7353f7055597bc61305414c5371106ebef"

user=> (sc/token-urlsafe 32)
"kfbGVrB6jz6hyOl_2rX9UIHgiop2-rM_jo2XEK7oTj0"

user=> (sc/token-bytes 16)
#object["[B" 0x3b2454e9 "[
The library is dead simple, but may be still useful for managing secrets. Source: https://github.com/lk-geimfari/secrets.clj Feature requests are welcomed, of course. Thank you’ll for attention 😊.
#2022-10-0309:52Linus EricssonConsider using https://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html#getInstanceStrong-- instead of the (wesk) sha1prng that is the default in secureRandom.#2022-10-0315:47FlowI’ll take a look. Thank you very much! ❤️#2022-10-0315:56FlowI’ve created an issue: https://github.com/lk-geimfari/secrets.clj/issues/11 I’ll fix it soon. Thank you again!#2022-10-0318:41Jacob O'Bryant#biff https://github.com/jacobobryant/biff/releases/tag/v0.5.0 is out with a fairly significant addition: feature maps now support a :queues key which makes it convenient to create java.util.concurrent.BlockingQueues and associated thread pools for consuming them. Also: • Updated XTDB to 1.22.0 (breaking change, requires re-indexing) • Uses add-libs to add new dependencies from deps.edn on file save, without needing to restart the repl There is some additional discussion of the new queues feature in the https://biffweb.com/p/september-updates/ post.#2022-10-0320:18Jeff Evanskc-repl - an interactive took for exploring Apache Kafka clusters. Still a little bit rough around the edges, but should be fully functional. PRs welcomed (I’m using GitHub to track issues), especially if you have any experience getting CI going for a GitHub based project! https://github.com/jeff303/kc-repl#2022-10-0320:24Ben SlessI was going to write that one day out of frustration! Going to take it out on a spin#2022-10-0320:56Jeff EvansAwesome, let me know if you manage to get it to work for your case. I’m focusing on Protobuf support next (to scratch my own personal itch)#2022-10-0421:47lreadclj-yaml v1.0.26 - YAML encoding and decoding for Clojure Highlights from the https://github.com/clj-commons/clj-yaml/blob/master/CHANGELOG.adoc#v1.0.26: • Unbroke accidental breaking change to low-level decode fn that we didn’t realize some folks were using • Added :key-fn to parse-string and parse-stream for full control over YAML key conversion • Docs and docstrings reviewed and updated, public API defined and guidance on usage of low-level functions added. • Continuous integration is now also testing on Windows, all supported JDKs, all supported versions of Clojure and is linting. clj-yaml is one of the many projects under the loving care of https://github.com/clj-commons.#2022-10-0515:44borkdudeAn all new shiny clj-kondo clj-kondo clj-kondo release with lots of new features and improvements! 🎉 Clj-kondo is a static analyzer and linter for clojure code that sparks joy . It's also providing the analysis and linting in clojure-lsp 2022.10.05 • https://github.com/clj-kondo/clj-kondo/issues/611: New linter: :unused-value - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#unused-value. Also see issue https://github.com/clj-kondo/clj-kondo/issues/1258. • https://github.com/clj-kondo/clj-kondo/issues/1794: New linter: :line-length - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#line-length (https://github.com/ourkwest) • https://github.com/clj-kondo/clj-kondo/issues/1460: New linter: :unknown-require-option - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#unknown-require-option. (https://github.com/NoahTheDuke) • https://github.com/clj-kondo/clj-kondo/issues/1800: New linter: :aliased-namespace-symbol - see https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#aliased-namespace-symbol. (https://github.com/NoahTheDuke) These and other changes can be found in the fhttps://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20221005 Join the channel at #clj-kondo#2022-10-0515:51borkdudeA special thank you to @UEENNMX0T, who, as you can see has been contributing a lot :)#2022-10-0516:21lreadHeya @UEENNMX0T lookie what your new :aliased-namespace-symbol linter found in cljdoc sources! ❤️
src/cljdoc/server/pedestal.clj:562:44: warning: An alias is defined for cljdoc.render.build-log: render-build-log
src/cljdoc/server/pedestal.clj:615:4: warning: An alias is defined for io.pedestal.interceptor: interceptor
src/cljdoc/server/pedestal.clj:617:15: warning: An alias is defined for io.pedestal.http.impl.servlet-interceptor: servlet-interceptor
src/cljdoc/server/pedestal.clj:618:15: warning: An alias is defined for io.pedestal.http.impl.servlet-interceptor: servlet-interceptor
src/cljdoc/server/routes.clj:93:14: warning: An alias is defined for io.pedestal.http.route: route
src/cljdoc/server/routes.clj:97:22: warning: An alias is defined for io.pedestal.http.route: route
src/cljdoc/server/routes.clj:98:21: warning: An alias is defined for io.pedestal.http.route: route
src/cljdoc/server/routes.clj:103:12: warning: An alias is defined for io.pedestal.http.route: route
src/cljdoc/server/system.clj:116:4: warning: An alias is defined for integrant.core: ig
src/cljdoc/util/fixref.clj:97:22: warning: An alias is defined for clojure.string: string
linting took 2287ms, errors: 0, warnings: 10
#2022-10-0519:49Noah BogartI've contributed to many open source projects but this one might be my favorite. A real pleasure to work with you on it#2022-10-0518:39ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2022.10.05-16.39.51 with lots of improvements and fixes 🎉 Main highlights: • Critical performance fix introduced on previous release, please try this release if having any performance issues. Kudos to @jacob.maine • We now have a new CLI/API command: clojure-lsp dump -- This should build and return lots of information about your project like clj-kondo normalized analysis, project information, dependency-graph and others, if you want do some kind of data analysis in your project/s, consider giving it a try. • Lots of critical fixes for Windows -- Thanks to the huge help of @chaos (@ikappaki) • We now decompile the whole jar if it's a java project, offering whole lsp-java features 🚀 For complete changelog and more info, check #lsp Thank you for all supporters and help during this release! gratitude#2022-10-0518:40borkdudeWhen will the brew package be updated?#2022-10-0518:41borkdudeah now works :)#2022-10-0518:51Eugenthanks for Java integration. I am missing java class navigation. looking forward to trying it out#2022-10-0520:03Noah Bogartclojure-lsp dump >> dump.edn produces a 148mb file lol#2022-10-0520:13ericdalloBig data, almost a mini data lake 😛#2022-10-0520:14Noah BogartI suspect the file will be smaller when I don't run it over our production codebase (roughly 150k lines)#2022-10-0520:16ericdalloAlso not sure you are interested on all output keys, that's why there is the filter-keys flag :)#2022-10-0520:39borkdudeyou could also run clj-kondo analysis directly on (parts of) your project to get smaller output#2022-10-0520:07Asko Nōmmhttps://github.com/askonomm/ruuter, a tiny, Babashka compatible, zero-dependency HTTP router • Implemented support for wildcard parameters • Fixed issue where if you used multiple optional parameters, they would get wrong data from the URI.#2022-10-0608:14kingmobhttps://github.com/clj-commons/potemkin has been released. There are no changes to functionality. Everything should work as before. The major change is improved support for clj-kondo. While not comprehensive, it should cut down on false positives. Note that import-vars was already handled specially by clj-kondo, so if that’s the only potemkin macro you use, you shouldn’t see any differences. Minor changes include doc improvements, the minimum Java version is now 8, and the fast-bound-fn and fast-memoize fns are deprecated (they’re almost never faster than modern Clojure).#2022-10-0610:44ericdalloThat's awesome!#2022-10-0608:51Ivar Refsdalhttps://github.com/ivarref/clj-paginate, fast pagination of vectors and maps with Clojure for GraphQL, has been released. This release adds support for multiple sort criteria (ascending or descending), e.g. you may specify sort-attrs as [[:date :desc] [:id :desc]]. It also adds support for the named parameter :inclusive? that allows a user to refresh a page based only on an old pageInfo/connection. It introduces the named parameter :sort? that defaults to true. clj-paginate will now (by default) sort the data for you. Power users, people who already cache the (sorted) data to be paginated, can disable that feature.#2022-10-0614:24borkdudeThe first public release of gh-release-artifact : Upload artifacts to Github releases idempotently This is small library that I've been using in projects like babashka, clj-kondo, and others, for a few years now, to automatically upload files to Github releases. This library is especially handy when your project is built from different CIs and releases for those files have to be created idempotently (babashka currently uses 4 different CIs to build releases on). Repo: https://github.com/borkdude/gh-release-artifact The main API function is here: https://github.com/borkdude/gh-release-artifact/blob/main/API.md#borkdude.gh-release-artifact/release-artifact#2022-10-0620:42Cam SaulMethodical 0.15.0 is out! https://github.com/camsaul/methodical/releases/tag/0.15.0.1 Methodical is a library that acts like a drop-in replacement for Clojure multimethods, with tons of extra features, support for functionally/non-destructively composing multimethods, better error checking, and debugging tooling. The last few releases have focused on improving the developer experience with better error checking, documentation generation, and tooling, and 0.15.0 continues this theme. The marquee feature of 0.15.0 is support for macroexpansion-time defmethod arglist arity validation. If you have a three-arg multimethod and try to write a defmethod for it that takes only two args, get an error message right away!
(m/defmulti ^:private mf
  {:arglists '([x]), :defmethod-arities #{1}}
  keyword)

(m/defmethod mf :x [x] x)
;; => ok

(m/defmethod mf :x ([x] x) ([x y] x y))
;; => error: {:arities {:disallowed #{2}}}

(m/defmethod mf :x [x y] x y)
;; => error: {:required #{1}, :disallowed #{2}}
(Yes, this works with rest-argument & arities as well!) 0.15.0 also includes improved error messages, a bug fix, and ten new utility functions.
#2022-10-0620:47Noah BogartThat's sick! How does it work? Just checking the :arglists of the metadata?#2022-10-0620:52Cam SaulI considered doing that at first but decided that was ultimately too fragile, especially if you have "fancy" :arglists metadata like [x y z?] (meaning [x y] [x y z]) So instead you can attach a set of :defmethod-arities metadata that is a set of allowed arities; each arity is represented by either an integer or by a [:>= n] form for an arity with & rest arguments. The example above demonstrates using a plain integer arity. Here's an example that includes a 3-or-more-args arity:
;; methods must both a 1-arity and a 3+-arity
(m/defmulti ^:private mf
  {:arglists '([x] [x y z & more]), :defmethod-arities #{1 [:>= 3]}}
  keyword)

(m/defmethod mf :x ([x] x) ([x y z & more] x))
;; => ok

(m/defmethod mf :x [x y] x)
;; => error: {:arities {:required #{1 [:>= 3]}, :disallowed #{2}}}
#2022-10-0620:53Cam Saulit's smart enough to figure out if you cover your bases with other arities that aren't exactly the same as what was asked too:
(m/defmulti ^:private mf
  {:arglists '([x y z & more]), :defmethod-arities #{[:>= 3]}}
  keyword)

(m/defmethod mf :x
  ([a b c] x)
  ([a b c d] x)
  ([a b c d & more] x))
;; => ok, because everything required by [:>= 3] is covered, and everything present is allowed by [:>= 3]
#2022-10-0621:40Noah BogartOh I see. Okay, that makes sense. Very cool#2022-10-0708:05Ferdinand BeyerI've created a tiny VS-Code extension to run Babashka Tasks. First release v0.1.0 is out! https://marketplace.visualstudio.com/items?itemName=fbeyer.babashka-tasks#2022-10-0709:14Ferdinand BeyerSource code (ClojureScript) is here: https://github.com/ferdinand-beyer/vscode-babashka-tasks#2022-10-0905:17grzmhttps://github.com/grzm/awyeah-api com.grzm/awyeah-api {:git/tag "v0.8.35", :git/sha "1810bf6"} is available • Catch up to aws-api 0.8.596. • Fix handling of HEAD HTTP requests (such as S3 HeadObject). • Fix broken client datafy compatibility. • Use GMT instead of UTC for timestamp formatting.#2022-10-0913:26borkdudeThanks :)#2022-10-0915:53borkdudeNbb: Node.js babashka v1.0.136! (yes, 1.x.x!) Scripting in Clojure on Node.js using SCI 1.0.136 • https://github.com/babashka/nbb/issues/258: improvements for loading namespaces and JS code asynchronously • Fix compatibility with latest HoneySQL version • Bump promesa to latest version and include promise-aware doseq macro Github: https://github.com/babashka/nbb Npm: npm i Join the channel at #nbb#2022-10-1013:56seriogaFirst beta release of the parsesso — the new parser combinators library for Clojure(Script) https://github.com/strojure/parsesso#2022-10-1015:35Joshua SuskaloThis is awesome, I'm glad to see a good option with lookahead that can target non-string tokens#2022-10-1015:49seriogaI suppose all existing implementations work with non-char tokens#2022-10-1015:51Joshua SuskaloOf parser combinators yes, although we don't have a lot of well-supported options for that in Clojure. The main parser options we have are spec (which lacks lookahead) and instaparse (which doesn't support non-character tokens)#2022-10-1015:51Joshua SuskaloUnless I missed a third good option#2022-10-1015:58serioga@U5NCUG8NR I'm open for suggestions what to add in the library for specific real needs :-)#2022-10-1016:05Joshua SuskaloAwesome, I may get back to you. At the moment most of the projects that I've needed parsers for have died due to the lack of options I had, so I might pick some back up.#2022-10-1014:15valeraukoMade an example how to do server side rendering with re-frame + reitit + shadow-cljs + deno. Quite a few catches so hope someone will find it useful https://github.com/valerauko/hoge#2022-10-1016:22blueberryNew version published: Deep Learning for Programmers 2nd ed v 0.31.0 https://aiprobook.com/deep-learning-for-programmers/?release=0.31.0&amp;src=cslack#2022-10-1016:43borkdudeNew #quickdoc release https://github.com/borkdude/quickdoc Quickdoc analyzes your source code with clj-kondo and spits out an API.md file which you can check directly into source control. The tool works with Clojure and #babashka. v0.2.2 • Improved table of contents and source links (https://github.com/helins) • Support wiki syntax for var linking: [[foo]] (https://github.com/helins) • Upgrade clj-kondo to 2022.10.05 Big thanks @adam678 to for the improvements#2022-10-1116:04pezThere's a new #joyride in town: https://github.com/BetterThanTomorrow/joyride/releases/tag/v0.0.18https://github.com/BetterThanTomorrow/joyride/issues/92 • Fix: https://github.com/BetterThanTomorrow/joyride/issues/87 This is huge. Think about it. You now have npm reach! Thanks @borkdude! And thanks @eveningsky for improving the development of Joyride! ❤️ 🙏 joyride#2022-10-1119:20pezDear Clojurians. We just released Calva https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.307, with support for user/global REPL snippets via a config.edn file. It has always been possible to provide these via JSON, but it's quite clunky with JSON when writing Clojure code... Here's the top of the Changelog: • https://github.com/BetterThanTomorrow/calva/issues/1887`~/.config/calva/config.edn` • https://github.com/BetterThanTomorrow/calva/issues/1885`.calva/config.edn`https://github.com/BetterThanTomorrow/calva/issues/1885https://github.com/BetterThanTomorrow/calva/issues/1876https://github.com/BetterThanTomorrow/calva/issues/1878`v0.9.0` • Fix: https://github.com/BetterThanTomorrow/calva/issues/1880`calva.evalOnSave`https://github.com/BetterThanTomorrow/calva/issues/1880`calva.testOnSave`https://github.com/BetterThanTomorrow/calva/issues/1880 • Bump pre-bundled deps.clj.jar to v1.11.1.1165https://github.com/BetterThanTomorrow/calva/issues/1871 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1869https://github.com/BetterThanTomorrow/calva/issues/1767 • Document workaround for: https://github.com/BetterThanTomorrow/calva/issues/1866 • Fix test running issue: https://github.com/BetterThanTomorrow/calva/issues/1821https://github.com/BetterThanTomorrow/calva/issues/1843 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1857https://github.com/BetterThanTomorrow/calva/issues/1859`deps.edn`https://github.com/BetterThanTomorrow/calva/issues/1859`:main-opts` • https://github.com/BetterThanTomorrow/calva/issues/1853 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1855 #2022-10-1209:15plexusLaunchpad 0.9.49-alpha is out, a Clojure nREPL launcher offering quality of life and fewer REPL restarts. • allow specifying additional alias definitions in deps.local.edn (also hot-reloads) • kill the clojure process when launchpad dies, and vice versa https://github.com/lambdaisland/launchpad#2022-10-1219:17arohnerhttps://github.com/griffinbank/rules_clojure is now stable. rules_clojure adds Clojure support to Bazel, the multi-language build tool. Bazel supports test caching and Remote Build Execution for dramatically faster build and test times#2022-10-1221:07borkdudeNeil, a CLI tool to add common aliases and features to deps.edn-based projects. 0.1.46 (2022-10-12) • Introduce neil dep upgrade API for upgrading existing dependencies. By https://github.com/teodorlu and https://github.com/russmatney. • Add nix flake. By https://github.com/jlesquembre. • neil version improvements. By https://github.com/rads. Repo: https://github.com/babashka/neil Channel: #babashka-neil#2022-10-1314:35Felipe ReigosaHey guys, this time I proved that MockMechanics is Turing complete (not a big surprise). I created the smallest universal Turing machine without using any code. Let me know what you think. MockMechanics is open source and written in clojure, check out the repo here: https://github.com/felipereigosa/mock-mechanics Also I often post videos about it here: https://www.youtube.com/c/MockMechanics#2022-10-1411:23borkdudelein2deps: a leiningen to deps.edn converter 🔥 https://github.com/borkdude/lein2deps#2022-10-1411:25thomasI am going to try this to convert my part Java/Clojure project to deps.edn. Thank you for this!!! 🙏#2022-10-1411:30jpmonettasNice, @U04V15CAJ on the readme it says For some reason this does work from inside the project you probably meant doesn't . Or am I just confused?#2022-10-1411:32borkdude@U0739PUFQ True, corrected#2022-10-1411:33borkdudeAlso see https://clojurians.slack.com/archives/C6QH853H8/p1665566737221019 (no reaction there yet)#2022-10-1414:52borkdudeNow with support for :scope "provided" - aaaaah, the talk preparation procrastination#2022-10-1418:31dchelimskyhttps://groups.google.com/g/clojure/c/1p3v71uWJY0/m/tX8p4eMDCgAJ#2022-10-1617:14Mark StoJetBrains have launched the public preview for their new Fleet IDE. Please, upvote https://youtrack.jetbrains.com/issue/FL-15340/Support-for-Clojure so we can all enjoy faster Clojure integration.#2022-10-1709:29mbjarland+1 for this. The architecture and idea of fleet looks promising. It’s nowhere near cooked enough to be a candidate today but having read their article series about fleet I have high hopes. For those in a hurry and not familiar with youtrack, you had to hit the three dots to find the vote button:#2022-10-1709:31mbjarlandah take it back, there was a little icon to the right as well:#2022-10-1709:35mbjarland#2022-10-1709:35mbjarlandthey sure made that icon tiny#2022-10-1716:07Annaia Danversclassic JetBrains UI design#2022-10-1719:51Mark Sto😅#2022-10-1618:36ikitommi[metosin/malli "0.9.0"] is out! Malli is a high-performance data-driven data specification library for Clojure/Script. Most notable changes: • Malli can now properly generate recursive schemas by using test-check’s recursive-gen. Kudos to @ambrosebs for the many rounds on design and implementation on this. For the curious, see https://github.com/metosin/malli/blob/master/src/malli/generator.cljc and tests for the details. • CLJS instrumentation is moved to runtime and supports now multi-arity and varargs functions, 🙇 @danvingo • New compact presentation for error values via malli.error/error-value, inspired by Expound • Improved regex schema driver cache performance by @ben.sless • Source-compatibility with #C029PTWD3HR by @borkdude • Improved printing of errors with CLJS • Sequence to Tuple transformers All changes: https://github.com/metosin/malli/blob/master/CHANGELOG.md#090-2022-10-16 Code: https://github.com/metosin/malli Big thanks to all contributors and to the whole #CLDK6MFMK community!#2022-10-1708:39ikitommi… and there is now [metosin/malli "0.9.1"] with a small fix: • Fix instrument! in dev.cljs/start! - pass cljs function schemas https://github.com/metosin/malli/pull/766#2022-10-1719:42mkvlr👁️ Clerk – Moldable Live Programming for Clojure io.github.nextjournal/clerk {:mvn/version "0.11.603"} has been released . Notable improvements in this release: • 🚰 Tap Inspector to let Clerk show clojure.core/tap> stream. Viewable via (nextjournal.clerk/show! 'nextjournal.clerk.tap):juggling::skin-tone-2: Improvements to static building including Clerk-viewer based build progress reporter (via :dashboard option). Also support customizing :index. • 🌈 Extend nextjournal.clerk/show! accept more argument types, also loading notebooks from urls or passing showing a notebook from a java.io.StringReader (useful in remote repls) • 🦾 Support babashka.cli for nextjournal.clerk/serve! and nextjournal.clerk/build! via metadata annotations. To use it add org.babashka/cli {:mvn/version "0.5.40"} or newer to your :deps and set :main-opts ["-m" "babashka.cli.exec"] And much more, get all details in the:wood: https://github.com/nextjournal/clerk/blob/549b581eff7692a6ed0ae676370265ba12708489/CHANGELOG.md#011603-2022-10-17, find the release on 📦 https://clojars.org/io.github.nextjournal/clerk, read the 📖 http://github.clerk.garden/nextjournal/book-of-clerk/commit/32451f85976ff5e0bc18941f42e1d3e8ce859640/, follow-up in #C035GRLJEP8.#2022-10-1805:06robert-stuttafordtap inspector 😍#2022-10-1805:06robert-stuttafordstrong emoji game here @U5H74UNSF 👏#2022-10-1811:12jpmonettas[ANN] FlowStorm Clojure[Script] debugger 3.1.259 is out FlowStorm is a Clojure and ClojureScript debugger with some unique features. Most remarkable new features for this version are : • Add support for core.async/go blocks instrumentation • Add #rtrace ^{:thread-trace-limit X} where X is a int. Execution will throw after tracing X times. Useful as a fuse for debugging possibly infinite loops • Add support for snapshoting mutable values via flow-storm.runtime.values/snapshot-value multimethod • Add #tap-stack-trace, to tap the current stack trace wherever you add it • Add [Ctrl|Alt]+MouseWheel on forms to step prev/next • Alt+Tab now works on MacOs for switching between the debugger and the repl windows (thanks to Lucy Wang @lucywang000) • Fix extend-protocol and extend-type instrumentation for ClojureScript • Fix instrumentation breaking variadic functions in ClojureScript • And a lot of bug fixes Github repo : https://github.com/jpmonettas/flow-storm-debugger/ User Guide https://jpmonettas.github.io/flow-storm-debugger/user_guide.html Big thanks to Roam Research (https://roamresearch.com/) for sponsoring the project! If you have any questions please show up on #flow-storm Cheers!#2022-10-1817:12jpmonettasIf anybody gets a google dependency conflict when adding the debugger to a Clojure project, try the latest commit which removes the hard dependency on ClojureScript. The coordinates are : {:git/url "" :sha "eda9c04237cd947fff43861c15197458165683fd"}#2022-10-1813:20Alex Miller (Clojure team)Clojure just turned 15 years old and we want to celebrate this achievement with you! In this special edition of the https://www.linkedin.com/events/clojureturns15-buildingnuengine6987854393173807104/about/, the Clojure team will hold a round table celebrating 15 years of Clojure! clojure Back in 2005, Rich Hickey started the development of Clojure during a sabbatical, releasing it in 2007. Since then, Rich's team has grown and Clojure has become one of the most loved programming languages out there (e.g., 3rd place on the 2022 Stack Overflow Developer Survey) with adoption in many industries. We at Nubank are proud to be the global sponsors of Clojure and invite you to this celebration. Jaret Binford will host a roundtable on Zoom, Oct 26th at 5:30 pm US EDT with Rich Hickey, Stuart Halloway, Alex Miller, and Michael Fogus. The talk will be hosted in English and will have live interpretation in Portuguese and Spanish.#2022-10-1813:39flowthingWill the talk be recorded?#2022-10-1813:42Alex Miller (Clojure team)I assume so#2022-10-1813:46eval2020Added to the https://www.clojurians-zulip.org/feeds/events.ics! 📆#2022-10-1813:52Alex Miller (Clojure team)thanks! and yes it will be recorded#2022-10-1817:42borkdudeExciting :) It's quite late in the day for me, so I will probably drop off at some point and watch the rest later.#2022-10-2609:06practicalli-johnI’ll be fast asleep for the live event, but looking forward to watching the recording. Thanks to everyone for making Clojure such a wonderful success and a joy to use every day.#2022-10-2707:28borkdudeLooking forward to the recording, as I missed this completely due to ... sleep :)#2022-10-1813:34plexuslambdaisland/deja-fu 1.3.51 is out. deja-fu is a ClojureScript time library with a delightful API, and this release adds support for rendering relative time strings like "5 minutes ago" https://github.com/lambdaisland/deja-fu#2022-10-2007:55emilaasaThat is a truly great name plexus 🙂#2022-10-1814:54borkdudeSCI - Configurable Clojure interpreter suitable for scripting and Clojure DSLs sci v0.5.34 (2022-10-18) • Performance optimizations for let (up to 8x faster) • https://github.com/babashka/babashka/issues/1340: Add arglists/docstring to protocol methods (https://github.com/bobisageek) • #801: preserve location metadata for vars defined in macro-expansion • Add new var->symbol API function in sci.core • Add new resolve API function in sci.core • Expose *print-namespace-maps* from sci.core • Internal simplifications for and, or and do Channel: #sci Repo: https://github.com/babashka/sci#2022-10-1815:49mkvlr🚤 Announcing an up to 8x performance improvement for Clerk viewer functions! https://github.com/nextjournal/clerk/commit/b9d06418c0f9ef8df8fb5526a4ecaa5a957de589#2022-10-1816:26borkdudeBabashka 1.0.164, the first 1.x.x release! babashka Native, fast starting Clojure interpreter for scripting Babashka hasn't had any breaking change for almost 2 years, so I figured it would be a good time to drop the 0. prefix! 🎉 Release notes: https://github.com/babashka/babashka/blob/master/CHANGELOG.md#10164-2022-10-17 Also check out the release notes of the previous release which wasn't announced in this channel, but which was quite a big one: https://github.com/babashka/babashka/blob/master/CHANGELOG.md#010163-2022-09-24 Channel: #babashka Repo: https://github.com/babashka/babashka Thanks to everyone involved!#2022-10-1817:40ambrosebshuge congrats!#2022-10-1818:52Cora (she/her)congrats!!! it's such a wonderful tool#2022-10-1821:03lread@U04V15CAJ, you’ve helped me to stop hating writing bash, bat, powershell, and Makefile scripts. That’s because, thanks to babashka, I don’t have to write them anymore! Thanks a ton for all the sweat, thought and love you put into bb!#2022-10-1900:47djblueJust released https://github.com/djblue/portal 0.33.0, a data inspection / exploration tool for Clojure. Since the last announcement, Portal has seen a lot of improvements and integrations but here are some of the highlights: • https://cljdoc.org/d/djblue/portal/0.33.0/doc/ui-concepts/filteringhttps://cljdoc.org/d/djblue/portal/0.33.0/doc/guides/portal-standalone#share-command (https://djblue.github.io/portal/?content-url=https://gist.githubusercontent.com/djblue/9a2cd250e061f62ce527b20648fd8256/raw/e7bd673df60b3c503306956b950bb9589ba480eb/data.clj&amp;content-type=application/edn) • https://cljdoc.org/d/djblue/portal/0.33.0/doc/editors/vs-code/clojure-notebookshttps://cljdoc.org/d/djblue/portal/0.33.0/doc/guides/clerk Drop by #portal with any questions.#2022-10-1901:39pfeodrippe^"The integration of everything with everything else!" With this Clerk viewer, I now can add a bunch of guides on how to use Portal for my specific use case (I use Pathom and Malli, and you can navigate through them with Portal, so this will be very helpful).
- [ ] Teach how to use Portal
    - [ ] Attributes navigation
    - [ ] Schema examples generation
    - [ ] Logs
    - [ ] Exceptions
    - [ ] Tap and `user/debug`
    - [ ] Pathom query analyzer viewer
    - [ ] Pathom traces presented as markdown elements
    - [ ] Editable text using SCI (not the one in Clerk, not the one
          in Portal, but our own lol)?
Many thanks \o
#2022-10-1901:42wilkerlucioPathom 3 2022.10.18-alpha is out! The most fun update is that now on defresolver input inference, you can use the :or part to mark parts of the input as optional, check an example at the https://pathom3.wsscode.com/docs/resolvers/#optional-inputs • Fix error when user requests ::pcr/attribute-errors in lenient mode • In process-one helpers, when the value is collection it gets the run stats from the parent • Add support for :or keyword on defresolver and defmutation args, values in :or will be flagged as optional • Set ::pco/inferred-params when params are inferred • Instead of overriding ::pco/input or ::pco/params when explicitly set, now Pathom will merge that with the inferred input/params • Issue 159 - Fix placeholder nodes on dynamic resolvers https://clojars.org/com.wsscode/pathom3#2022-10-2012:34borkdudeDual announcement: https://github.com/squint-cljs/squint: ClojureScript syntax to JavaScript compiler - 0.0.0-alpha.50 https://github.com/squint-cljs/cherry: Experimental ClojureScript to ES6 module compiler - 0.0.0-alpha.57 Squint was previously announced here as ClavaScript, but was renamed to squint. Many improvements have been made since August, among which a substantial core functions library written in pure JS that has counterparts to CLJS core functions. Squint can be used to emit JavaScript from Clojure s-expressions and translates to direct JavaScript, without immutable data structures, etc, for ultra-small bundles. Cherry is similar to squint, but is closer to normal CLJS (immutable data structures, uses core functions from CLJS proper) with the penalty for a bigger output bundle (~300kb minimum). Both tools have much in common and share common compiler code. Some of the distinct features compared to normal CLJS: • 1-1 .cljs <-> .js file correspondence • Async/await support • Native support for JSX • Compiled code shares a common core module and can be distributed on NPM Work in progress: • Factoring out more common code • (n)REPL support#2022-10-2012:49borkdudeSee this twitter thread for a couple of highlights: https://twitter.com/borkdude/status/1582683524364382209#2022-11-0115:34Daniel Gerson@U04V15CAJ Will squint ever be runnable on the JVM? (Thinking for sending 'eval' commands for any bridge like Playwright-Java etc).#2022-11-0115:38borkdude@U03B2SRNYTY It is already runnable on the JVM#2022-11-0115:42borkdude
(require '[squint.compiler :as squint])
(squint/compile-string "(+ 1 2 3)")
#2022-11-0123:21Daniel Gerson@U04V15CAJ I guess it's not obvious without clojar details. I suppose it is :git/url includable, but I wouldn't presume it to be if the first thing I see is npm install ... . Many thanks for the info.#2022-11-0210:08borkdudeYes, we should document it#2022-11-0210:09borkdudePR welcome#2022-10-2018:20nateNew release of tabl, a cli and pod for producing tables from data: https://github.com/justone/tabl/releases/tag/v0.3.0 • Adds support for two new table formatting modes (markdown and k8s) • Updates compatibility with latest Babashka#2022-10-2023:30hlshipio.aviso/pretty 1.3 Pretty prints things prettily; mostly, carefully formatted exception output using ANSI colors, smarter ordering, and name-demangling to take the pain out of figuring out what went wrong, and where. Significant changes in 1.3: The ANSI font and color constants and functions in io.aviso.ansi now are no-ops if ANSI output is disabled; there's new logic to only enable ANSI output if in a REPL or if the JVM has a console, and an environment variable to override that decision. This make pretty less problematic when running in a server, or as a command in a Unix pipeline, as it won't try to log ANSI codes into text log files. New function: io.aviso.repl/-main; this simply installs pretty exceptions before delegating to clojure.core/main. The pretty replacement for clojure.repl/pst now writes output to *err* not *out*. https://github.com/AvisoNovate/pretty#2022-10-2117:52jaretHowdy All! Datomic 1.0.6527 is now available datomic ! https://forum.datomic.com/t/datomic-1-0-6527-now-available/2143#2022-10-2207:08kongeorI'm very happy to announce "evolduo", a platform for collaborative musical synthesis using evolutionary algorithms. This is my master's thesis project. It's open source and free to use. You can see it in action here: http://evolduo.cons.gr and check the source here: https://github.com/kongeor/evolduo-app#2022-10-2214:14respatializeddunno if you've defended this or not but congrats on finishing and releasing your thesis!#2022-10-2219:32kongeorThank you. I have finished the project work, I still have to write 50 or more pages, including usage results stats etc. that's why this is getting released now 🙂#2022-10-2211:37borkdudeClj-kondo configs clj-kondo https://github.com/clj-kondo/configs A repository with clj-kondo configurations for libraries, as dependencies#2022-10-2309:26Carsten BehringI started an experiment if and how it makes sense to create a library of re-usable viewers for https://github.com/nextjournal/clerk https://github.com/behrica/casegamas I am very much looking for all kind of reusable Clerk viewers, to see if such a collection makes sense, so PRs or hints for existing viewers are very welcome. It contains as well a concept of globally unique ids for viewers, see README, an other experiment. https://github.com/behrica/casegamas/blob/main/README.md#2022-10-2320:29Daniel Slutskyvery inspiring!#2022-10-2323:42nateInitial release (v0.1.9) of https://github.com/justone/bb-pod-racer, a library to speed up the development of Babashka pods. This is in use in the https://github.com/justone/tabl and https://github.com/justone/brisk apps.#2022-10-2613:36Alex Miller (Clojure team)Clojure CLI release https://clojure.org/releases/tools#v1.11.1.1182 is now available: • https://clojure.atlassian.net/browse/TDEPS-70 - Detect missing jar in classpath and download automatically • https://clojure.atlassian.net/browse/TDEPS-232 - Add generic https://clojure.org/guides/install_clojure#_posix_instructionshttps://clojure.atlassian.net/browse/TDEPS-200 - Clean up default user deps.edn • https://clojure.atlassian.net/browse/TDEPS-219 Fixed -X:deps find-versions doesn't find Maven versions that start with a letter • Add :n option to -X:deps find-versions and default to 8 • During -X:deps prep, use :exec-args of alias being prepped, if present • During -X:deps prep, add :current flag to prep current project, default=false • Fix bad invocation of deps/prep-libs! in clojure.tools.cli.api/prep • Improve error message when local dep directory is missing • For downstream tools, added new https://download.clojure.org/install/stable.properties to look up latest stable tools release • Update deps to latest#2022-10-2615:40borkdudeReleased deps.clj 1.11.1.1182 as well: https://github.com/borkdude/deps.clj/blob/master/CHANGELOG.md#v11111182#2022-10-2615:40borkdude@U015879P2F8 Perhaps the MSI can updated now as well#2022-10-2619:42seancorfield@U064X3EF3 That "well-known location" still seems to have 1.11.1.1165 as the contents.#2022-10-2619:43seancorfield(my update CLI script at work checks it and won't let me install 1.11.1.1182 unless I override that 🙂 )#2022-10-2619:54Alex Miller (Clojure team)I see latest there but maybe caching is at play#2022-10-2619:54Alex Miller (Clojure team)
% curl -O 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    77  100    77    0     0    287      0 --:--:-- --:--:-- --:--:--   298
% cat stable.properties
1.11.1.1182 bbaa93430b68378ed479d4acc6cc95d1e8f70ba4dae6771b3f7959cd39af3ebf
#2022-10-2620:01borkdudeAlso seeing that here#2022-10-2620:02seancorfieldI'm seeing 1.11.1.1165 on multiple machines here -- both via web browsers and via curl#2022-10-2620:03Alex Miller (Clojure team)I changed the cache TTL on that, hopefully that should help (I had done that previously on a few other "changing" things in that bucket but forgot this one)#2022-10-2620:03seancorfieldWhat's the TTL now? I'll let you know when I start seeing 1.11.1.1182#2022-10-2620:04Alex Miller (Clojure team)I also just invalidated the cloudfront cache to force a reset, that usually takes a few minutes#2022-10-2620:05Alex Miller (Clojure team)the default ttl on downloads (which is mostly append-only) is ~year. I changed this file to 60s.#2022-10-2620:05borkdudeDid you also remove that special rule you had for Sean in there? ;)#2022-10-2620:06Alex Miller (Clojure team)oh I added some extra ones for him#2022-10-2620:08seancorfieldAnd we're off to the races now! Thank you!#2022-10-2617:18Ferdinand BeyerFirst release of https://github.com/ferdinand-beyer/reitit-ring-defaults v0.1.0: sensible default middleware for Reitit. This lifts the popular ring-defaults library with its wrap-defaults to Reitit’s data-driven middleware, for more flexibility (per-route middleware), performance and convenience!#2022-10-2716:03Alex Miller (Clojure team)https://github.com/clojure/core.async 1.6.673 is now available • https://clojure.atlassian.net/browse/ASYNC-248 Dynamically load ioc analyzer only when needed • Perf improvements in go macro compilation • Note: as of this version, core.async requires Clojure 1.10+#2022-10-2716:07vlaaadHow big are the perf improvements?#2022-10-2716:10Alex Miller (Clojure team)minor. dynamically loading the analyzer is a significant improvement for aot-compiled apps though#2022-10-2716:11Alex Miller (Clojure team)in that they don't load it at all#2022-10-2716:13Alex Miller (Clojure team)which can save ~0.5s in load time#2022-10-2716:20vlaaadthat’s good!#2022-10-2716:24borkdudeand also you can exclude the analyzer as a dependency, if you're interested in that#2022-10-2717:24Ben SlessAny news regarding ASYNC-234?#2022-10-2717:27Alex Miller (Clojure team)no, hope to have some cycles to look at some more async stuff soon#2022-10-2719:29borkdudehttps://github.com/borkdude/respeced: testing library for clojure.spec fdefs v0.1.2: compatibility with Clojure 1.11. Thanks @chaos https://github.com/borkdude/respeced/blob/master/CHANGELOG.md#012 The previous release is from almost 4 years ago :)#2022-10-2809:24borkdudehttps://github.com/borkdude/jet: CLI to transform between JSON, EDN and Transit, powered with a minimal query language Now with support for YAML as well, powered by #C042XAQFCCU 0.3.31 (2022.10.28) • https://github.com/borkdude/jet/issues/74: Add yaml support (https://github.com/qdzo) 0.2.20 (2022.06.17) • Make suitable as clj tool 0.2.19 (2022.06.17) • Migrate CLI to https://github.com/babashka/cli • Introduce jet.main/exec which can be called as clojure CLI exec fn #2022-10-2815:10seriogaYet another lazy map implementation 🙂 zizzmap — Persistent map with lazily evaluated values for Clojure(Script). https://github.com/strojure/zizzmap#2022-10-2815:12dpsuttoni’ve never seen this style. interesting
(extend-protocol InternalAccess
  nil,,,,,,,,,,,,,,, (internal-map [_] {})
  ObjMap,,,,,,,,,,,, (internal-map [this] this)
  PersistentArrayMap (internal-map [this] this)
  PersistentHashMap, (internal-map [this] this)
  ITransientMap,,,,, (internal-map [this] this))
#2022-10-2815:14seriogayou've just seen it 🙂 Sometimes I use commas to align things#2022-10-2822:32KelvinReleasing version 0.1.1 of https://github.com/yetanalytics/flint-jena, a companion library to my https://github.com/yetanalytics/flint library. This library translates Flint EDN directly into Apache Jena objects, without the intermediate step of compiling a SPARQL string; this generally results in a doubling of performance.#2022-10-2922:06uochanJust pushed thrempl, A proof of concept for simple template engine using threading macros. https://github.com/liquidz/thrempl E.g.
(render "{{-> name greet}}!"
        {:name "world" :greet #(str "Hello " %)}))
;; => "Hello world!"

(render "{{->> name (str \"Hello \")}}!"
        {:name "world" :str str}))
;; => "Hello world!"
#2022-10-3015:23vlaaadNew release of #cljfx dev tools — https://github.com/cljfx/dev 1.0.36 — now has interactive props&types reference UI and live cljfx component tree inspector! Many thanks to clojurists-together Clojurists Together for funding this work!#2022-10-3116:13dvingoI have been iterating on new features of my subscriptions library (originally extracted from re-frame) https://github.com/matterandvoid-space/subscriptions and have some major additions: - support subscriptions that are just functions (defsub API), you can subscribe to the function directly and invoke them which will return the current value (no need to deref!) - support layer2 subscriptions that are Reagent Cursors getting rid of the needless re-running of all layer2 subs when app-db is swap!'d - Given a Fulcro component, automatically create subscriptions that will fulfill arbitrary EQL queries for that component (and any nested components). - recursive EQL joins can have an arbitrary transformation function and an arbitrary expansion function to easily pull only parts a component graph - this support works on top of any Clojure database with an entity API, in addition to working on the frontend cljs. - Performant react hooks integration, subscription arguments are memoized by default for you, all subscriptions used by a component are cached until the component is unmounted. - use react context so that you don't have to pass through your app-db to your entire component tree. check the cljdoc output for a more pleasant reading experience: Readme: https://cljdoc.org/d/space.matterandvoid/subscriptions/2022.10.29/doc/readme EQL docs: https://cljdoc.org/d/space.matterandvoid/subscriptions/2022.10.29/doc/eql-queries-via-subscriptions React Hooks docs: https://cljdoc.org/d/space.matterandvoid/subscriptions/2022.10.29/doc/react-hooks-subscriptions My main motivation is constructing a library to be used with fulcro to allow for large scale cljs web application development, by combining the best parts of fulcro with those from re-frame. To test out this integration, I have a todomvc clone that uses fulcro for app-db, mutations, and transactions, helix for rendering and using the subscription hooks and pathom + datalevin for a backend, plus using malli function instrumentation in clj+cljs. https://github.com/matterandvoid-space/todomvc-fulcro-subscriptions Looking forward to hearing any thoughts or feedback!#2022-10-3116:37pithyless@U051V5LLP I think https://github.com/matterandvoid-space/todomvc-fulcro-subscriptions is private, as I'm seeing a 404#2022-10-3117:14fvides+1#2022-10-3118:00dvingo@U05476190 thanks! (facepalm) fixed it#2022-11-0103:58quantisanStepwise v0.8.0 is released. Added support for nested AWS Step Function calls and more inter-step JSON manipulation. We use Stepwise extensively at Motiva AI to orchestrate our Clojure services and workflows. Happy to answer any question. https://github.com/Motiva-AI/stepwise#2022-11-0417:08Lyn HeadleyWow. This is really impressive. At work we work so hard to build our step functions, this makes it seem so easy.#2022-11-0108:46flowthingv0.17.0 (alpha) of Tutkain, a Sublime Text package for interactive Clojure development, is out, with pretty good Babashka support. Changelog: https://github.com/eerohele/Tutkain/blob/master/CHANGELOG.md#0170-alpha---2022-10-31 Documentation: https://tutkain.flowthing.me Follow up in #tutkain.#2022-11-0108:46flowthingA little preview of the new Babashka support: https://tutkain.flowthing.me/bb.mov#2022-11-0109:03borkdudeThanks! Also shared it https://twitter.com/borkdude/status/1587369613075124225#2022-11-0109:49flowthingThanks, and many thanks once more for accommodating the necessary changes in Babashka and SCI!#2022-11-0115:06Vesa NoriloLooks very nice! Does it play along with Figwheel?#2022-11-0115:24flowthingNot currently, no, sorry. I tried implementing Figwheel support a while ago, but it didn’t work out. I could give it another try. Ideally, I’d like Tutkain to be agnostic with regard to build tools and just support CLJS, but that is sadly not possible.#2022-11-0115:32Vesa Norilono worries. I might give it a try if I find time.#2022-11-0115:33flowthingCool. If you do and have any questions, just let me know.#2022-11-0217:30borkdudeClj-kondo, a linter and static analyzer for Clojure code that sparks joy clj-kondo 2022.11.02 • https://github.com/clj-kondo/clj-kondo/issues/1846: new linters: :earmuffed-var-not-dynamic and :dynamic-var-not-earmuffed. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.md#dynamic-vars. • https://github.com/clj-kondo/clj-kondo/issues/1842: Add :exclude option to :used-underscored-binding (https://github.com/staifa) • https://github.com/clj-kondo/clj-kondo/issues/1840: Fix warning in .cljs and .cljc for :aliased-namespace-symbol in interop calls. (https://github.com/NoahTheDuke) • https://github.com/clj-kondo/clj-kondo/issues/1845: add :derived-location to analysis when location is derived from parent node • https://github.com/clj-kondo/clj-kondo/issues/1853: fix :level :off not being respected in :discouraged-var configs that are merged in. • https://github.com/clj-kondo/clj-kondo/issues/1855: accept symbol in addition to keyword in clojure.spec.alpha/def name position • https://github.com/clj-kondo/clj-kondo/issues/1844: support extra schema in schema.core/defrecordhttps://github.com/clj-kondo/clj-kondo/issues/1720: prevent parse error on defmulti without args 2022.10.14 • https://github.com/clj-kondo/clj-kondo/issues/1831: Add :redundant-fn-wrapper support for keyword and binding calls (https://github.com/NoahTheDuke) • https://github.com/clj-kondo/clj-kondo/issues/1830: Fix warning on :include-macros in .cljs and .cljc for :unknown-require-option linter. (https://github.com/NoahTheDuke) • https://github.com/clj-kondo/clj-kondo/issues/1238: Build a linux/aarch64 executable in CI (https://github.com/cap10morgan) • Add :exclude option to :unknown-require-option • Enable :unused-value by default • Publish .sha256 files along with released artifacts#2022-11-0217:34ChaseRelease link: https://github.com/clj-kondo/clj-kondo/releases/tag/v2022.11.02#2022-11-0304:30Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1189 is now available • https://clojure.atlassian.net/browse/TDEPS-233 bash script fixes from stale jar check changes • Add some missing items on help and man page#2022-11-0314:29borkdudedeps.clj updated https://github.com/borkdude/deps.clj/blob/master/CHANGELOG.md#v11111189 cc @U015879P2F8#2022-11-0320:11borkdude@U015879P2F8 cool, I see it's automated :) https://github.com/casselc/clj-msi/releases/tag/v1.11.1.1189
#2022-11-0320:12borkdudeand this was also automated: https://github.com/littleli/scoop-clojure/commit/d0def1ee2abd1ab7eed4686d40a4b67e9950b2b8 right @UBLU3FQRZ?#2022-11-0320:13borkdudethis one will probably be updated soon via a daily cron job: https://github.com/littleli/scoop-clojure/blob/master/bucket/clj-msi.json#2022-11-0320:13chuckleheadI think there was a small issue with the version checking earlier, not sure if they've had a chance to fix#2022-11-0320:14borkdudethey = @UBLU3FQRZ?#2022-11-0320:14chuckleheadsorry, yes#2022-11-0320:14borkdudecool#2022-11-0321:09littleliI have an open PR, but checkver is failing. May happen I won't make it today :-/ Also I'm on a business trip only with my Macbook.#2022-11-0321:10littleli...I'm referring to clj-msi + scoop release here#2022-11-0321:18borkdudeno problem!#2022-11-0322:19littleli
scoop install clj-msi
to install with an unofficial msi installer should work now too.
#2022-11-0305:18Alex Miller (Clojure team)https://github.com/clojure/tools.build 0.8.4 is now available • Same as 0.8.3 but now available as a Maven artifact at org.clojure/tools.build#2022-11-0310:13scarytomhas the maven artifact been published yet? I can't see it in central https://search.maven.org/search?q=a:tools.build#2022-11-0311:52Sam RitchieLooks like it’s there now!#2022-11-0312:40scarytomIndeed it does: great stuff#2022-11-0414:48nonrecursiveFirst release of https://github.com/donut-party/dbxray - get metadata for JDBC dbs and use that to generate basic specs or schemas. Huge thanks to @seancorfield for next-jdbc, which this relies on, and whose source code helped me figure out how to work with jdbc. Also thanks to @mpoffald for contributing and helping me think it through. I’m going to be demoing this https://www.meetup.com/london-clojurians/events/288750683/#2022-11-0415:10Noah Bogartyooooooooo this is sick#2022-11-0415:16Noah BogartOne of my favorite parts of rails is schema.rb which acts as a canonical in-code representation of the database, which makes checking "how is this all connected?" as simple as reading a single file (instead of sending multiple queries in a database repl and figuring it out yourself). This pretty neatly solves that problem if you use a wrapper around a migration library (like migratus)#2022-11-0415:28nonrecursiveyes! That’s something I miss from rails too. I really like that idea#2022-11-0415:40Noah BogartIs it possible to use clojure.java.jdbc? We've not begun switching over yet#2022-11-0415:41borkdudeyou can use both side by side without having conflicts AFAIK#2022-11-0415:43Noah BogartThat's true#2022-11-0415:47tolitius@U0AQ1R7FG noice! would be great to be able to https://github.com/donut-party/dbxray/blob/1d84500c9693ab806414128905aae844614675dd/src/donut/dbxray.clj#L31 a schema name#2022-11-0415:49nonrecursivehmm yeah xray could take an optional second argument, an adapter config that’s merged with the default#2022-11-0416:12nonrecursive@U0541KMAZ ok I threw that in without really checking it but I think it should work 😅#2022-11-0416:14dharriganamazing work!#2022-11-0416:21kennytiltonLove the name!#2022-11-0416:28seancorfield> Is it possible to use clojure.java.jdbc? We've not begun switching over yet We have both in our codebase at work. We create a HikariCP connection pooled datasource from our db-spec hash map at startup and then pass {:datasource cpd} around our code as db-spec. That works as-is with c.j.j and, since next.jdbc 1.2.790, that also works as-is so it's easy to use the two together while you migrate. Prior to that, when we called next.jdbc we passed (:datasource db-spec). Just bear in mind that c.j.j's default is rs/as-unqualified-lower-maps in next.jdbc unless you also change the code to handle the results (which we mostly did not do). So you can easily switch one call at a time.#2022-11-0417:07tolitius@U0AQ1R7FG yep, https://clojurians.slack.com/archives/C06MAR553/p1667576944769159?thread_ts=1667573312.021829&amp;cid=C06MAR553 to create the schema! https://github.com/donut-party/dbxray/blob/a3bd2cb391e040ed0d5d51d0374d387d26a8aef1/src/donut/dbxray/generate/malli.cljc#L18 might need to only take the “`table-name`” once though?
=> (csk/->PascalCaseSymbol :foo)
Foo
=> (csk/->PascalCaseSymbol :foo :foo)

Execution error 
No value supplied for key: :foo
#2022-11-0418:49nonrecursivewhoops thanks, good catch!#2022-11-0419:09nonrecursivethank you @U11EL3P9U and @U0PUGPSFR 🙂#2022-11-0419:50richiardiandreawoooo man this is awesome!#2022-11-0420:08nonrecursive😊 thanks! @mpoffald helped me with it. I hope it’ll be useful for people!#2022-11-0420:33Ben SlessSo cool! One of the things which was on my list of "when I get to it or get angry enough" Thank you!#2022-11-0420:41Ben SlessTiny suggestion regarding malli schema: emit a registry and not def forms?#2022-11-0420:42nonrecursivehmm what do you think of having both? generate-defs generate-registry#2022-11-0420:43Ben SlessI certainly see no reason to object 🙃#2022-11-0420:44Ben SlessNow imagine plugging this in to clerk, portal, etc 👀#2022-11-0420:51Ben SlessYou made a db explorer, buddy. Or at least the building blocks for one. Congrats 🙂#2022-11-0420:52Ben SlessYou can also write a db client. A desktop client. With membrane!#2022-11-0421:03nonrecursiveI think that would be super dope!#2022-11-0418:11alexyakushevClojure Goes Fast has kickstarted its new shiny knowledge base with detailed documentation on clj-async-profiler. Basically, everything from the blog posts got restructured, edited, and revitalized, and some fresh guides were added. http://clojure-goes-fast.com/kb/profiling/clj-async-profiler/#2022-11-0421:22nonrecursiveFirst* release of https://github.com/donut-party/datapotato, a library for handling database fixtures for tests! It’s great for making tests clearer, more concise, and easier to maintain, and it has integrations for next-jdbc, XTDB, and datomic. *datapotato is a fork of https://github.com/reifyhealth/specmonstah and should be 100% backwards-compatible (you should only need to change your namespace requires). datapotato provides better interfaces for the intended use case, and it should be easier to get productive with it#2022-11-0421:52nonrecursiveYou can use https://github.com/donut-party/dbxray to help you get started with datapotato - dbxray can generate the clojure specs / malli schemas you need to generate data, plus the “potato schema” datapotato needs to handle entity hierarchies#2022-11-0505:40Ben SlessReally went looking for a "Because I'm a potato" quote in the readme 😄#2022-11-0514:36athosPostmortem https://github.com/athos/Postmortem/releases/tag/0.5.2 is out. Postmortem is a simple debug library for Clojure(Script) that features data-oriented logging and tracing. 0.5.2 added support for Babashka.#2022-11-0600:55seancorfieldHoneySQL -- Turn Clojure data structures into SQL -- com.github.seancorfield/honeysql {:mvn/version "2.4.947"} -- https://github.com/seancorfield/honeysql -- this is a fairly release in terms of impact and focuses mostly on improving DDL support: • Fix https://github.com/seancorfield/honeysql/issues/439 by rewriting how DDL options are processed; also fixes https://github.com/seancorfield/honeysql/issues/386 and https://github.com/seancorfield/honeysql/issues/437; Whilst this is intended to be purely a bug fix, it has the potential to be a breaking change -- hence the version jump to 2.4! • Fix https://github.com/seancorfield/honeysql/issues/438 by supporting options on TRUNCATE. • Address https://github.com/seancorfield/honeysql/issues/435 by showing CREATE TEMP TABLE etc. • Fix https://github.com/seancorfield/honeysql/issues/431 -- WHERE false differed between the DSL and the where helper. • Address https://github.com/seancorfield/honeysql/issues/430 by treating :' as introducing a name that should be treated literally and not formatted as a SQL entity (which respects quoting, dot-splitting, etc); this effectively expands the "escape hatch" introduced via https://github.com/seancorfield/honeysql/issues/352 in 2.2.868. Note that the function context behavior formats as a SQL entity, rather than the usual SQL "keyword", whereas this new context is a literal transcription rather than as a SQL entity! • Address https://github.com/seancorfield/honeysql/issues/427 by adding set-options!. • Address https://github.com/seancorfield/honeysql/issues/415 by supporting multiple column names in ADD COLUMN, ALTER COLUMN, DROP COLUMN, and MODIFY COLUMN. Follow-up in #C66EM8D5H#2022-11-0610:26seriogaassertie — new Clojure(Script) library of assertion macros. https://github.com/strojure/assertie#2022-11-0622:48niwinzPromesa -- A promise library & async toolkit for Clojure and ClojureScript -- funcool/promesa {:mvn/version "9.0.507"} -- https://github.com/funcool/promesa Relevant changes: • Add bulkhead (concurrency limiter) pattern (JVM only for now) • Add with-executor helper macro for define scoped thread executor for promesa api (experimental), with the ability to optionally shutdown or shutdown&interrupt the executor on the end of scope. • Add pmap function (analogous to the clojure.core/pmap but a bit simplified and with the ability to set custom executor thanks to with-executor macro or clojure.core/binding) (also experimental). • Initial support of Loom/JDK19 virtual threads with new helpers: p/vthread-call, p/vthread (macro). • Documentation improvements and restructuring • Drop support for JDK<11 In development: • Channels (intended to be used with virtual threads or standard threads, no go macro) • Improvements to the bulkhead/concurrency limiter pattern#2022-11-0708:18seancorfieldThe kata-bootstraps repo now has a Clojure CLI / deps.edn project, to go with the Leiningen one it's had for five years https://github.com/swkBerlin/kata-bootstraps/tree/master/clojure#2022-11-0709:58mpenetNew version of https://github.com/exoscale/lingo is out - 1.0.0-alpha24 - It fixes cljs compatibility Lingo is a pretty printer/"explainer" for clojure.spec errors. It extends explain-data with a lot more information and also provides utilities to generate messages for various contexts#2022-11-0714:56kennytiltonAnnouncing Flutter/MX, https://github.com/kennytilton/flutter-mx/blob/main/README.md, a ClojureDart effort combining the reach of Flutter https://flutter.dev/, the dynamic power of Clojure, and the transparent state management of Matrixhttps://github.com/kennytilton/matrix. Flutter/MX (`f/mx`) mirrors Dart/Flutter code but simplifies it and handles state seamlessly. Use it for rapid prototyping or, since ClojureDart compiles to Dart, to deploy. Here is the Counter app using f/mx:
(fx/material-app
  {:title "Flutter/MX Counter Demo"
   :theme (m/ThemeData .primarySwatch m.Colors/blue)}
  (fx/scaffold
    {:appBar (fx/app-bar
               {:title (m/Text "Welcome to Flutter/MX World")})
     :floatingActionButton
     (cF (fx/floating-action-button
           {:onPressed (as-dart-callback []
                         (mswap! (fm* :z-counter) :value inc))
            :tooltip   "Increment"}
           (m/Icon m.Icons/add .color m.Colors/black)))}
    (fx/center
      (fx/column
        {:mainAxisAlignment m.MainAxisAlignment/center}
        (fx/text {:style (p/TextStyle .color m.Colors/black
                           .fontSize 18.0)}
          "You clicked the button this many times:")
        (fx/text!
          {:style (fx/in-my-context [me ctx]
                    (.-headline4 (.-textTheme (m.Theme/of ctx))))}
          {:name  :z-counter
           :value (cI 0)}
          (str (md/my-value)))))))
MobX fans will appreciate the transparency of Matrix, but Matrix goes even further. "Further" is a tl;dr for another time, but briefly, Matrix takes a "reactive first" approach, wrapping all concerns in a transparently reactive layer of dynamic objects which can be extended in OO prototype fashion. f/mx provides tailored Matrix objects that wrap Flutter widgets, which is why f/mx code looks like Dart code, but simpler and with no apparent state management. f/mx has successfully achieved "proof of concept". We need to wrap more widgets, and write some doc, but you can explore dozens of demo examples involving animations, tables, forms, snackbars, grids, tabs, a FAB, and more, including a complete implementation of the TodoMVC classic: (see below) Besides those examples, the f/mx development team is available for onboarding and help with coding. If Lisp and Flutter together sound good, ping @hiskennyness here or on the Flutter Community Slack for help getting your ClojureDart or f/mx running.
#2022-11-0714:57kennytilton#2022-11-0722:33phronmophobicAnnouncing https://github.com/phronmophobic/clong — a wrapper for libclang and a generator that can turn c header files into clojure apis.#2022-11-0808:41jumarI'm a newbie in this are but how does it compare to {:tag :a, :attrs {:href "https://bugs.openjdk.org/browse/JDK-8282048"}, :content ("https://bugs.openjdk.org/browse/JDK-8282048")} https://bugs.openjdk.org/browse/JDK-8282048 ?#2022-11-0810:36niwinzlooks like it uses that as impl detail#2022-11-0815:39Joshua SuskaloRight now it's primarily using JNA, which does not use the FFI preview. You can see work in #C02EEAUHSJJ to overcome a few bugs which are currently holding that support back.#2022-11-0818:05phronmophobicClong is meant to complement ffi options like JEP422 and JNA. Calling into native code using any ffi option requires knowing the type information of the args/return values which clong can extract from header files. Additionally, clong extracts enums and struct info.#2022-11-0822:48phronmophobicClong will also automatically extract docstrings for functions if a common convention is used.#2022-11-1005:13jumarPerfect, thanks for the additional info.#2022-11-0813:45pezSay hello to @cospaia/prettier-plugin-clojure, a #cljfmt based Prettier plugin for Clojure code. https://github.com/PEZ/prettier-plugin-clojure I need it for a project where indentation has been lost for blocks of code. Where the code blocks are in different languages, Clojure being just one of them. Probably a more serious plugin should be written using zprint and support Prettier and zprint options, but for my use case, this simple plugin is enough.#2022-11-0813:48pezI was surprised to see that the problem of indent-some-code-of-any-language has such a limited selection of solutions. Prettier was the only project I found taking it on. I'm not super happy about having to bring nodejs into the mix, but whatever works, works, I guess.#2022-11-0814:42Noah BogartHey @U0GA10KA8 , did you see this?#2022-11-0814:49zharinovYes, I like it#2022-11-0814:54pez@U0GA10KA8 do I recall correctly you are looking at implementing a Prettier Plugin for Clojure? This one is really simple and stupid, and not really meant to be ”THE prettier-plugin-clojure”. It was just something I need for a project. So many things I don't bother with in this one. 😃#2022-11-0814:55zharinovYeah I see, you've done your MVP faster than me 😂#2022-11-0814:56pezPlease feel free to grab whatever you find useful from this one.#2022-11-0815:01zharinovI was about to start from no-op implementation and provide a mechanism for adding more and more nuances (that leverage Prettier specifics) on top of it. Seems like instead of doing no-op, it's possible to fallback to cljfmt, which makes it usable from day 1.#2022-11-0819:54pezDepends on what your goals are, of course, and what you want to learn. I do think that it is better to base a ”real” plugin on zprint rather than cljfmt (unless you're rolling your own formatter). zprint has a lot of knobs and settings. So you could take this MVP approach using zprint defaults and then step-by-step map Prettier options to zprint settings. And then implement zprint-special options and also support providing those via EDN.#2022-11-0820:00pezI guess a similar approach using cljfmt would also be of value to certain projects. cljfmt is probably the most common formatter after all.#2022-11-0820:03pezIf you're going for speed, neither of cljfmt och zprint is the way to go. On large code bases something much faster would save a lot of time and give faster feedback. Parinfer is probably the fastest indenter out there, but it does only indenting, not any other type of formatting.#2022-11-0916:00zharinovI'm not sure big codebase is the big concern. In practice, the only file you mostly format (via hotkey) is the current one. And also maybe some git pre-commit hook runs locally only for changed files. On the CI environments, however, formatting check needs to be performed on the whole codebase, but I guess it can be tolerated to be running for up to 30–60 seconds.#2022-11-0916:08pezI happen to know of a codebase where they wish for something much, much speedier than cljfmt.#2022-11-0916:10pezIt is a daunting task to address that issue though. Maybe you can take that on next. 😃#2022-11-0916:10zharinovWell, now you made me wonder what's inside Prettier cache dir 😁#2022-11-0916:42pezHmmm, maybe Prettier is smart about its cache and could help because of that... In this codebase I am thinking about they have some own cache solution and it often gets confused when switching between branches and you end up having to cljfmt everything before commit. Which is a horrible Dx. So maybe, maybe, even if the Prettier plugin have just wrapped cljfmt, it could still improve things...#2022-11-0819:44sheluchinI'm happy to announce the public launch of my first Clojure project. SeqFind is a web service that leverages @borkdude's clj-kondo library to analyze projects in Clojure's ecosystem. Largely inspired by Eric Normand's article https://ericnormand.me/article/100-most-used-clojure-expressions, SeqFind looks for and reports on the most used namespaces and functions of popular Clojure libraries. The idea is to highlight the parts that are most used in real projects and to show those usages as a means to allow people to learn by example. At the moment there is a limited number of hand-picked projects listed while I smooth out the details. The goal is to eventually list every library's usages. There is more information available on the About page. I'd be happy to receive feedback on how to improve this resource for everyone. https://seqfind.com#2022-11-0820:50phronmophobicWhat data format do you use for the analysis? Is it hard to plug in new repos? I have a data dump of analyzing 11k repos with clj-kondo, https://blog.phronemophobic.com/dewey-analysis.html#Results#2022-11-0821:13sheluchinI'm storing the analysis results in a SQL DB. I've attached a screenshot of the schema. It's a work in progress as my understanding of Clojure improves. Some bits of the schema were added to make certain queries a little more convenient to access and some of the structure is there because I thought I'd eventually be adding more data in those places. It could probably have a more compact representation and be more normalized. It's not hard to plug in new repos, but it does take some time. The results are also not perfect, which leads to some findings being omitted due to unsatisfied normalization constraints. When I looked at the failures, most of them seemed to be related to misconfigured clj-kondo hooks in those libraries, leading to mismatches in the usage results. I'd definitely like to look for more opportunities to use inputs from the community to make improvements. If there's some way to adopt your analysis results (or, conversely, my schema) while still being able to satisfy the core feature set, I'd be up for that. I glanced through the Dewey data some time ago and ultimately decided to do my own ETL, but I will find some time to look at it in more detail.#2022-11-0821:19borkdude@UPWHQK562 This is super cool! :)#2022-11-0821:25sheluchin@borkdude many thanks to you and others in the community creating great tools that make this kind of thing fun to implement 🙂#2022-11-0821:30ericdalloc/c @U066U8JQJ about pathom#2022-11-0821:32ericdallo@UPWHQK562 that's amazing. Is it possible to spin a separate SeqFinding locally? For example, I'd like to use it at Nubank and see how libraries are used on multiple nubank projects etc#2022-11-0821:34ericdalloAlso, not sure you considered using clojure-lsp dump for that as well, as it has a better understanding of project source-paths automatically#2022-11-0821:36ericdalloit would help fixing some limitations like only supporting deps.edn ATM#2022-11-0821:44sheluchin> Is it possible to spin a separate SeqFinding locally @UKFSJSM38 at the moment it is not, but providing a companion tool for local usage is something I've thought about a little bit. It could potentially be used to optionally inform SeqFind web about ecosystem developments - like a crowdsourcing helper sort of thing. > Also, not sure you considered using clojure-lsp dump I did consider it! I initially had the idea to mirror clojure-lsp's data format as much as possible, but clojure-lsp dump wasn't available when I started this effort. It is very much a direction I would like to explore.#2022-11-0821:46ericdalloAwesome, LMK if need any help, SeqFind looks really great, congrats!#2022-11-0822:00phronmophobicOne of the goals for dewey is to make this sort of analysis available for tool writers. The analysis data does include all the raw info, but in a slightly different format. If we did achieve some consensus on a particular data schema, I would be happy to adopt it. Ideally, it wouldn't be coupled to any particular database, but could provide tools for easy loading.#2022-11-0822:01phronmophobic@UKFSJSM38, I also wasn't aware of clojure-lsp dump. I'll take a look for the next dewey update.#2022-11-0822:10sheluchin@U07M2C8TT provided some interesting insights into clojure-lsp's approach in this https://clojurians.slack.com/archives/CPABC1H61/p1662144341021069?thread_ts=1662052808.444659&amp;cid=CPABC1H61 a while back. Basically LSP uses its current format because editor integration requires writing new data to be fast so as not to introduce editor lag. In SeqFind's case the needs are somewhat reversed because there are practically no write operations outside of the ETL routines (which can run in the background without degrading user experience) but being able to report on aggregate stats over many projects is a core requirement that clojure-lsp doesn't have.#2022-11-0822:12borkdudeAnd this is why clj-kondo's data export is the way it is: just a few buckets with flat unindexed data, because you can never predict in which way people need to use this data :)#2022-11-0822:14ericdalloYeah, that's why clojure-lsp dump provides clj-kondo analysis and its dep-graph as it is that is what we use internally for editor features, creating a third API would be too much I guess#2022-11-0822:15borkdude@UPWHQK562 You could also consider that people could make an alias in their project :seqfind {...} such that clj -Spath -A:seqfind gives the classpath that should be used for analysis or so. Clerk does something similar#2022-11-0822:16borkdudeor perhaps clj-kondo should support such an alias#2022-11-0822:18borkdudeAnyway, great stuff. As you know, keyword and locals analysis is also available, not sure how useful it would be for this project#2022-11-0822:28lreadVery cool @UPWHQK562!#2022-11-0822:29sheluchinI don't know exactly how locals would fit, but there's probably some way to get value out of it. I can imagine keyword reporting when considered on a temporal plane ie. "when did a keyword first start getting used?", but that would require doing commit history analysis and would increase complexity quite a bit. Keyword reporting could be particularly useful for libraries that fully qualified keywords in namespaces they control (reverse domain name notation or something). For example, Fulcro RAD uses keywords such as :com.fulcrologic.rad.report/before-load for configuring reports. I can imagine it would be helpful to be able to find usages thereof when figuring out how to use that. I guess just including a robust search might satisfy such use cases though.#2022-11-0822:30phronmophobicI'm extremely interested in a database of specs (and their keywords)#2022-11-0822:33phronmophobicAnother reason to include keywords is that you might be using a web framework like luminus and come across some keyword config and would like some extra docs.#2022-11-0907:26Lidor CohenWow what an idea! Loved it! I love ideas that generate/extract very much needed auxiliaries (docs, specs, examples, tests...) "incidentally" from the main effort (i.e no extra effort for the extra mile) 👏 👏 👏#2022-11-0914:49Noah BogartThis is very cool! One note/thought: The top listed library is clojure itself, and under "namespaces" column says 1140. Is that "number of namespaces within clojure library" or "number of other libraries that use depend on the namespace clojure"?#2022-11-0921:33sheluchin@UEENNMX0T good catch! Definitely a bug because querying the db directly doesn't produce the same result. I will have that patched up for the next iteration. Thanks for pointing it out 🙏#2022-11-0918:00greglookThere's a new 1.1.0 release of [com.amperity/ken](https://github.com/amperity/ken), an observability and tracing library. This release aligns the tracing identifiers and header support with OpenTelemetry's W3 Trace Context standard, making interoperation with other OTel-based tools more plug-and-play.#2022-11-0918:48robert-stuttafordamazing#2022-11-0921:07Mark WardlePleased to announce https://github.com/wardle/hermes, a clojure SNOMED CT terminology server and library, live in use across a number of health care facilities in the World, including the UK. Used as a terminology server, but also embeddable into real-time data pipelines and batch analytics. Rather than the usual approach of creating, and caring for a single terminology server, hermes creates what should be regarded as immutable data files, and you can containerise and switch at the API gateway level, treating terminology resources as cattle, and not pets. Since I last posted, the important changes are: • Improved autocompletion results for typeahead functionality for medical terms • Better support for dimensionality reduction for analytics, including mapping to simple reference sets (subsets) and intersecting a set of concepts with an expression • Fixes to indexing when source data contains duplicate items in which one relationship is active and another representing the same relations is inactive. Hermes is a single component of a wider suite of health and care tooling, to which it composes using a graph API (Pathom), but it can be used standalone as a HTTP server, used as a HL7 FHIR terminology server via https://github.com/wardle/hades, as an embedded library with either clojure or java APIs. Most of the heavy lifting is done by lmdb and Apache Lucene.#2022-11-1110:25wotbrewAs I am not a clinician or employed in health a lot of the domain goes over my head - but just wanted to say your stuff is always really nicely organised, documented and the code is clean and clear, therefore I think they could be really nice reference Clojure programs for anyone looking for real-world examples, bravo 👍 ❤️ 👏#2022-11-1115:09Mark WardleThanks! That’s very kind of you to say. #2022-11-0921:55uochanJust released build.edn ver 0.8.174, Library making your Clojure library build process easy. https://github.com/liquidz/build.edn Added version operation like "bump-major-version"#2022-11-1009:47robert-stuttafordnice work here @UBL24PLE6! for new Clojure users, it would be beneficial to understand what build.edn does differently to the other options in this space e.g. https://github.com/clojure/tools.build / https://github.com/seancorfield/build-clj, or just using plain old deps.edn + CLI. trade-offs, founding principles, etc#2022-11-1211:03niwinzPromesa -- A promise library & concurrency toolkit for Clojure and ClojureScript -- funcool/promesa {:mvn/version "9.1.536"} -- https://github.com/funcool/promesa Relevant changes: • Channels & CSP pattern -- Experimental, JVM only, core.async alternative and similar API, that laverages Virtual Threads -- https://funcool.github.io/promesa/latest/channels.html#2022-11-1216:27Asko Nōmmhttps://github.com/askonomm/sember v0.0.12 - A one-file static site generator for the individual > Sember is a one-file static site generator. If you're like me then you're probably tired of tinkering with the endless options for themes, changing them, and so on and so forth, and all you want is just a website that works. Well, look no further. All that Sember needs is one file. Simply create a sember.edn file in whatever directory you want, install Sember, and run it in that directory. Woalaa, your generated site can be found in the public/ directory. This is a quite early release with lots still planned, like showing links elsewhere, generating a CV page (and PDF), etc. Sember is meant to be used as a website that showcasts the individual. Kind of like a business card.#2022-11-1216:38AvelinoWe have a new federation (mastodon) with the face of Clojure, you are all very welcome I look forward to seeing you all https://clj.social#2022-11-1309:51magnarsGood idea! 🙂 I just joined, but the frontpage is blank at the moment.#2022-11-1314:00oliver marksnice now we just need some rooms on matrix :)#2022-11-1314:49kennytiltonLet's get this trending! https://clj.social/@kennytilton/109337042722463268 🚀#2022-11-1409:22simongrayAll of the CSS is getting blocked here:
'integrity' attribute for resource '' with computed SHA-256 integrity 'm0ryFWp6tHgRNBNwke1GlnxzD/g94XFN8KHdP/eZack='. The resource has been blocked.
109337042722463268:1 Failed to find a valid digest in the 'integrity' attribute for resource '' with computed SHA-256 integrity 'NBgLHHgo16Oc5wZb35mdz6u1zZKoNGGw837y2xN+ohE='. The resource has been blocked.
109337042722463268:1 Failed to find a valid digest in the 'integrity' attribute for resource '' with computed SHA-256 integrity 'YgEhHmwjKL88zKfUOMt/qRulYurIuHzhn4SZC9QQ5Mg='. The resource has been blocked.
109337042722463268:1 Failed to find a valid digest in the 'integrity' attribute for resource '' with computed SHA-256 integrity 'y3ofvCuP7fCtmfJB2ccDysNmpsf9bcbIUcKapmkjFts='. The resource has been blocked.
109337042722463268:1 Failed to find a valid digest in the 'integrity' attribute for resource '' with computed SHA-256 integrity 'onh6vHxzykkVgJkiww+OCPk0tKC48KMUD9GVJ8/LK
#2022-11-1409:25simongrayfor what it’s worth, I’m https://indieweb.social/@simongray :-)#2022-11-1411:46simongrayCSS seems to be fixed now 🙂#2022-11-1411:48AvelinoI was upgrading to mastodon version 4 https://clj.social/@avelino/109341866679835854#2022-11-1411:52magnarsStill looks like this to me:#2022-11-1413:04simongray@U07FCNURX tried clearing your cache?#2022-11-1413:06magnarsYep, that worked. 👍 I would think that that's what those cache buster file endings are for, tho. 🙃#2022-12-0403:26Avelinowelcome \o/#2022-11-1413:21borkdudehttps://github.com/babashka/sci: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs SCI is used in https://github.com/babashka/babashka, https://github.com/babashka/nbb, https://github.com/nextjournal/clerk, https://github.com/BetterThanTomorrow/joyride/ and many https://github.com/babashka/sci#projects-using-sci projects. 0.5.35 - 0.5.36 (2022-11-14) • https://github.com/babashka/sci/issues/817: mutation of deftype field should be visible in protocol method • https://github.com/babashka/sci/issues/816: restore recur target exception in do • https://github.com/babashka/sci/issues/819: don't use metadata in record implementation • https://github.com/babashka/sci/issues/831: preserve location of throw in stack trace • Drop name metadata from conditionally defined var • Implement in-ns as function rather than built-in (https://github.com/SignSpice) • https://github.com/babashka/sci/issues/832: reload analyzer API within CLJS to ensure ns-publics and resolve are available • Optimize analysis and evaluation of fn • Add more docstrings to built-in (core) macros and vars (https://github.com/mhuebert) • Add array Channel: #sci#2022-11-1421:25Anders EknertI needed https://jsonpatch.com/ functionality for the Jarl project, but found the current libraries had a few things missing (hard JSON library dependency, not working with ClojureScript, etc), so I hacked up my own. Just released https://github.com/borgeby/clj-json-pointer version 1.0.0! No external dependencies, ClojureScript support, passing all the tests from the JSON Patch conformance suite.#2022-11-1422:09Sam RitchieI don’t have a project comparison but this made me think of https://github.com/juji-io/editscript#2022-11-1422:13Anders EknertThanks! Looks useful, although for this project I needed JSON Patch support specifically. But may very well try that for other projects 🙂#2022-11-1613:02mynomotoI have https://github.com/daviddpark/clj-json-patch on my bookmarks, hopefully you were aware of that one.#2022-11-1613:03Anders EknertYep! That’s the one I started out with.#2022-11-1502:03greglookI've been playing with tools.deps recently and updating some of my projects as a way to learn the new tools better. A long, long time ago I wrote lein-hiera as one of my first Leiningen plugins, to help me understand the structure of my code. I've rewritten lein-hiera (now clj-hiera) so that it's primarily a simple library namespace which is easy to consume from the clj CLI as either a gitlib or as a stand-alone "tool". The plugin just bundles the library code now and does some lightweight wrapping to make the lein hiera command work. If you've ever wanted a graph of your namespace dependencies, give it a shot! https://github.com/greglook/clj-hiera#2022-11-1502:36Alex Miller (Clojure team)very cool! worked for me, but seems like it uses your default :sources instead of the :paths from your deps.edn (for me it scooped in my tests too - which are both under src/ in standard maven layout)#2022-11-1502:57greglookAh, yeah the non leiningen default is a naive #{"src"} - open to making that smarter#2022-11-1510:37borkdudehttps://github.com/borkdude/rewrite-edn: utility lib on top of https://github.com/clj-commons/rewrite-clj with common operations to update EDN while preserving whitespace and comments. 0.4.5 • Add conj: (str (r/update (r/parse-string "{:a [1 2 3]}") :a r/conj 1)) ;;=> "{:a [1 2 3 1]}" (https://github.com/zerg000000) • Add fnil: (str (r/update (r/parse-string "{:a [1 2 3]}") :b (r/fnil r/conj []) 1)) ;;=> "{:a [1 2 3] :b [1]}" #2022-11-1514:57Alex Miller (Clojure team)Set of releases to add support for repository policies in deps.edn: • https://github.com/clojure/tools.deps.alpha 0.15.1254 • https://github.com/clojure/tools.tools v0.2.9 • https://clojure.org/releases/tools#v1.11.1.1200 1.11.1.1200 • https://github.com/clojure/tools.build v0.8.5 9c738da#2022-11-1515:00Alex Miller (Clojure team)In most cases, the default policies are fine, but if you need this, an example of how this looks:
{:mvn/repos
 {"my-releases" {:url ""
                 :snapshots {:enabled false}
				 :releases {:enabled true
				            :update :daily
							:checksum :fail}}}}
These policies will be output with -Spom or -X:deps mvn-pom or write-pom in tools.build when generating a pom.xml. More docs here: https://clojure.org/reference/deps_and_cli#_maven (although I see the bullet formatting is off, so fixing that still)
#2022-11-1517:05borkdudehttps://github.com/borkdude/deps.clj/releases/tag/v1.11.1.1200#2022-11-1519:13richiardiandreaReleasing our first library here at Cohesic! It is a set of helpers for XTDB, especially around undo/revert of an entity https://github.com/cohesic/cohesic-xtdb https://cohesic.github.io/cohesic-xtdb/#2022-11-1608:17Christian Johansenm1p (short for “map” in the tradition of i18n) is a map interpolation library that can be used for i18n (or just externalizing textual content for a single language), theming, and similar use cases. It takes a data-driven approach to “flavor content”, allowing you to completely separate app logic from the mechanics of i18n/theming/etc, and supports arbitrary dictionary data, custom “dictionary functions” and more. More details in the Readme: https://github.com/cjohansen/m1p#2022-11-1616:37Noah BogartThis name is so clever#2022-11-1610:04borkdudeBabashka https://github.com/babashka/fs: file system utility library for Clojure v0.2.12 (2022-11-16) • https://github.com/babashka/fs/issues/73: add write-bytes and write-lineshttps://github.com/babashka/fs/issues/77: add update-file Channel: #babashka https://github.com/babashka/fs/blob/master/CHANGELOG.md#v0212-2022-11-16#2022-11-1614:44jpmonettasHi everybody! Just released Hansel 0.1.17 (https://github.com/jpmonettas/hansel) Hansel allows you to instrument Clojure[Script] forms and entire namespaces so they leave a trail when they run. It is the original flow-storm instrumentation code, moved into a separate library so we can build more tooling that depends on instrumentation without depending on the entire flow-storm debugger. The readme is still pretty rough so let me know if you are interested or show up in the #C03KZ3XT0CF channel.#2022-11-1723:47mauricio.szaboThis is SO COOL, thanks for publishing this!#2022-11-1614:48jpmonettasI just released FlowStorm debugger 3.2.271! FlowStorm is a Clojure and ClojureScript debugger with some unique features. The most important thing about this release is that it uses Hansel for instrumentation. Hansel code has more testing and a bunch of improvements which should make instrumentation better specially in ClojureScript. Apart from that, the release contains a couple of new features, fixes and changes : • New tap button allows you to tap> any value from the UI (nice to integrate with other tooling like portal) • New locals "tap value" allows you to tap> any locals • Value inspector navigation bar now shows keys instead of val text (which I think is much nicer) • Fix automatic [un]instrumentation watcher (helps with synchronization when you are instrumenting from the browser and also with #trace) Repo : (https://github.com/jpmonettas/flow-storm-debugger) Channel: #flow-storm Cheers!#2022-11-1622:05javahippiePublished clj-test-containers 0.7.4 to upgrade to the latest testcontainers-java version, along with some smaller technical changes and documentation fixes: https://clojars.org/clj-test-containers#2022-11-1715:15athosJust released https://github.com/athos/pogonos 0.2.1! Pogonos is yet another Clojure(Script) implementation of the Mustache template language. 0.2.1: • Support dynamic partials, a new feature introduced in the Mustache spec https://github.com/mustache/spec/releases/tag/v1.3.0 • Support running on Babashka • Add a new pgns command, which is installable via https://github.com/babashka/bbin#2022-11-1719:50dvingoNew release of my ClojureScript wrapper of the emotion css-in-js lib https://emotion.sh/docs/introduction https://github.com/dvingo/cljs-emotion version "2022-11-17.0.0" Notable change is the addition of :css prop (https://emotion.sh/docs/composition) support to helix.dom
(require [dv.emotion-helix-dom :as d])
(d/p {:css {:background "blue" ":hover" {:background "grey"}} "Hello")
See the readme and devcards for more: https://dvingo.github.io/cljs-emotion/#!/dv.cljs_emotion.helix_cards
#2022-11-1804:07Cora (she/her)heck yes, this is great#2022-11-1723:47mauricio.szaboFolks, this will be a really weird announcement: I'm publishing a pretty initial version of a plug-in called https://github.com/mauricioszabo/generic-lsp for the Pulsar editor. What is Pulsar, you say? Well, Atom is dying a fast death now, so some community members (me included) decided to keep the project alive. As we're still reimplementing most features of the old packages API, I also implemented a way to install packages directly from git repos. So, back to generic-lsp, is a package to support LSP servers in Pulsar. It has a pretty good support for Clojure-LSP, an ok-ish support for Javascript, C/C++ (Clangd), Rust, and Lua. It can use (but don't actually require) the packages Linter, Linter-UI-Default, Intentions and Datatips to do more magic stuff. You can install with pulsar --package install -t v0.1.3, after you grab one of the editor's binary from our CI (https://cirrus-ci.com/github/pulsar-edit/pulsar/master)#2022-11-1723:54seancorfieldgit-based package management -- I like it!#2022-11-1814:38mauricio.szaboWell, Atom already had that, but probably was for some internal usage because it tried to handle some very weird cases and installed a bunch of weird dependencies. It also didn't support tags, so I basically re-purposed the command and now things work just fine 🙂.#2022-11-1820:47athomasoriginalThis is great. Thanks @U3Y18N0UC for keeping Atom alive. I've switched over to nvim, but I will for sure check this out because Atom used to be my daily.#2022-11-1901:23uochanJust released antq ver 2.2.962 Tool to point out your outdated dependencies. https://github.com/liquidz/antq Added support for :antq/exclude metadata to exclude specific dependencies#2022-11-2013:02slipsetFinally got around to publish a new version of hickory under the clj-commons org. https://clojars.org/org.clj-commons/hickory Thanks a lot to @borkdude for helping out with porting the build from the old stuff to the new stuff#2022-11-2021:47borkdudehttps://github.com/babashka/nbb: Scripting in Clojure on Node.js using https://github.com/babashka/sci v1.1.146 released with exposed nREPL server API. You can now start an nREPL server from within a Node.js process, connect over the the network and evaluate / inspect stuff :-) See docs: https://github.com/babashka/nbb#nrepl-apihttps://t.co/ceorfx0Gpu Full changelogs https://github.com/babashka/nbb/blob/main/CHANGELOG.md - previously announced release here was 1.0.136 Channel: #nbb#2022-11-2112:36borkdudehttps://github.com/borkdude/edamamev1.0.16 Configurable EDN/Clojure parser with location metadata • Fix https://github.com/borkdude/edamame/issues/93: read-cond assumes LineNumberingIndexReader • Optimization: reset source logging buffer when reading source Channel: wherever you can reach me and in doubt #borkdude-misc ;)#2022-11-2207:17flowthingMitchell Hashimoto has Hashicorp, so… how about “Borkcorp” (and hence #borkcorp)? I think it has a pretty nice ring to it. “Purveyors of fine open-source Clojure software.” 🙃#2022-11-2121:48hlshipPedestal 0.5.11-beta-1 Pedestal is a set of batteries-included libraries for building HTTP-based services and applications. We are pleased to announce the first beta of Pedestal 0.5.11; this release primarily addresses out-of-date dependencies and security issues. Documentation: http://pedestal.io/ GitHub page: https://github.com/pedestal/pedestal Significant changes: - Now built using deps.edn - pedestal-jetty: Upgraded version of Jetty to 9.4.48.v20220622 to address known CVEs - Bumped many other dependencies for security and compatibility with Clojure 11 - pedestal-log: Fixed issues that made it difficult to override the built-in implementation of logging - pedestal-jetty: Removed blocking I/O inside a go block when using a WebSocket connection https://github.com/pedestal/pedestal/milestone/11?closed=1#2022-11-2121:53Eugengreat to see this moving forward.#2022-11-2121:55Eugenany plans to use newer jetty versions? 10 - 11 (uses jakarta API) ? https://github.com/pedestal/pedestal/issues/722#2022-11-2121:59hlshipShort answer: Yes. Long answer: We decided to prioritize getting a release out with fixes for known CVEs before coming up with a longer range strategy for supporting newer versions of Jetty.#2022-11-2122:01hlshipWe (myself and @U0FRJF287) are very excited to revitalize Pedestal and its documentation.#2022-11-2122:07Eugensounds great#2022-11-2122:08Eugenloking further for future releases#2022-11-2122:09Eugenwould love to test a release with version 10.x#2022-11-2219:59Alex Miller (Clojure team)This is a new release of a collection of datafy/nav helpers for working at the REPL. If you connect your REPL to a datafy/nav enabled viewer (e.g. https://docs.datomic.com/cloud/other-tools/REBL.html), you might find it useful. Currently has support for bytebuffers, threads, sockets, core.async, and reify; also helpers for writing your own datay/navs: https://github.com/Datomic/dev.datafy v0.1#2022-11-2220:04mkvlrthanks for sharing!#2022-11-2220:23seancorfieldNice. Should the :git/url be https:// format rather than {:tag :a, :attrs {:href "/cdn-cgi/l/email-protection", :class "__cf_email__", :data-cfemail "b0d7d9c4f0d7d9c4d8c5d29ed3dfdd"}, :content ("[email protected]")}? Plus also maybe a warning about wanting to exclude org.slf4j/slf4j-nop to avoid clobbering people's logging?#2022-11-2220:26Alex Miller (Clojure team)sure, I'll mention that to Stu#2022-11-2220:33Alex Miller (Clojure team)not sure what uses slf4j?#2022-11-2220:34Alex Miller (Clojure team)https://github.com/Datomic/dev.datafy/blob/main/deps.edn#2022-11-2220:48seancorfieldAh, my bad. I just used add-libs to bring in a bunch of stuff including that new lib and assumed that it was this that brought in the nop lib since I thought this was the only lib that got added... so maybe something else is bringing that in. Sorry.#2022-11-2320:13Daniel JompheSeems intriguing. I hope we'll see some live usage of this in the next weeks/months to understand what it gives in practice. We used to have Portal setup in our project but nobody used it. We'll surely revisit this all...#2022-11-2320:22seancorfield@U0514DPR7 I live and die inside Portal all-day, every-day! 🙂#2022-11-2312:43borkdudehttps://github.com/babashka/scittle: execute Clojure(Script) directly from browser script tags via SCI! v0.4.11 (2022-11-23) • Add scittle.re-frame plugin. This gives access to the https://github.com/day8/re-frame library. • Fix for https://github.com/babashka/scittle/issues/44: Honoring SCITTLE_NREPL_WEBSOCKET_PORT in scittle.nrepl • Add all public vars of cljs-ajax ajax.core • Upgrade several built-in libraries Check https://babashka.org/scittle/codemirror.html for a playground where you can try out the new re-frame plugin. Channel: #C034FQN490E#2022-11-2315:11joost-diepenmaatThis is the first release of https://git.sr.ht/~jomco/select-tree — similar to select-keys but selects in a nested collection.#2022-11-2315:13Noah BogartThat's pretty cool. I'm a little surprised that nil means "select all" instead of "select none". Any particular reason for nil instead of true or something else?#2022-11-2315:18joost-diepenmaatThat’s good feedback, thanks. My thinking was something like “nil means make no selection; do nothing; just keep what’s there”.#2022-11-2315:18Noah BogartAh yeah, that makes sense. I've been dabbling in Lua recently so I've been in the mindset of "a nil value removes the key" lol#2022-11-2315:19joost-diepenmaatI don’t think true really captures that either.#2022-11-2315:19borkdudeI was also expecting that nil would mean "remove" or so#2022-11-2315:19borkdudeI've used true as the "everything" value for things like this too#2022-11-2315:20joost-diepenmaatselect-tree works like an “allow list”, so you never have to explicitly remove keys. I could add true for this case if it’s less confusing, maybe#2022-11-2315:20borkdudeyes, I understand: but principle of least surprise you know#2022-11-2315:21borkdudeI've written a function like this so people could filter out stuff from HTTP responses, kind of like a graphql after the fact ;)#2022-11-2315:23joost-diepenmaatYeah. one of our use cases is to “redact” http data to make it leak less data when logging and also to make it easy to compare “live” responses to expected / recorded data.#2022-11-2315:23pithylessConsider a more dynamic case:
(select-tree data {:foo (when ,,,)})
if there is no way to specify a negative-selection, then you're back to using some kind of cond-> to build the selector dynamically (since you need to dissoc keys, instead of just passing in e.g. nil , false or [] as the value)
#2022-11-2315:23borkdudein my use case people could provide such a structure as one of the optional request body fields, to just get less data over the wire#2022-11-2315:25borkdudeThe notation I had for that, if I remember correctly (the code I wrote I no longer have):
{:library-name/default true
 :foo false}
so it would select all the fields except :foo
#2022-11-2315:26joost-diepenmaat@U05476190 I’ve thought about something like that a bit, but I haven’t really found an actual use-case yet. Do you have an example in mind?#2022-11-2315:26borkdudeThe use case is to not have to explicitly spell out the things you want to have but just specify what you don't want to have#2022-11-2315:27borkdudeif you have a large set of fields but one field contains a giant blob you're not interested in, it's handy to be able to say: leave this one out#2022-11-2315:27joost-diepenmaatI’m not sure if I really do want to support that, but I will think about it.#2022-11-2315:28borkdudewell, it's a 10 line function so it's easy enough to write your own ;)#2022-11-2315:29pithylessI just think that if the syntax was true for "select all", and nil/`false` for "select none" -> then it doesn't really hurt the spirit of the library, but supports all the potential cases mentioned in this thread.#2022-11-2315:29borkdudeexactly#2022-11-2315:31joost-diepenmaatExcept that having {:key false} is the same as not providing the key at all. Unless you’re working on sequential collections….#2022-11-2315:31joost-diepenmaatAh right I see what you mean @U05476190#2022-11-2315:33pithyless@U09N5N31T as to the use-cases, I can think of two examples: 1. many times I need to forbid certain keys more often than explicitly allow (in the spirit of Clojure open maps) 2. just tangentially related, but there is a certain nice developer experience I found in frontend libraries when they assume something like:
:classes ["some" "strings" (when visible? "optional")]
^ it seems like a simple thing, but this is really useful vs the alternative of filtering out the nils, etc. and joining the string explicitly
#2022-11-2508:26henrikCool! Have you considered EQL syntax? The example on the page would be:
(select-tree ring-request
  [:request-method
   :uri
   {:headers ["content-type"]}
   {:params [:pageNumber
             :pageSize]}])
If you wanted to select all headers, you would:
(select-tree ring-request
  [:request-method
   :uri
   :headers
   {:params [:pageNumber
             :pageSize]}])
#2022-11-2412:01olttwa📢 https://github.com/nilenso/goose/releases/tag/0.3.0 is out! 🎉 Goose is a background processing library for Clojure, made by nilenso. Message brokers are now pluggable 🔌! This version comes with support for RabbitMQ (0.2 only had Redis support), and lays down a protocol that allows you to integrate any backend like Postgres, Datomic or SQS. We also added some features based on the feedback from 0.2: • Periodic/Cron-style Jobs • Custom Metrics backend (StatsD, Prometheus, Metrics, etc.) • A new logo! goose You can https://github.com/nilenso/goose#getting-started with the Readme, or dig into details with the https://github.com/nilenso/goose/wiki/. You can also ping us on #C03RCGK0P8S.#2022-11-2517:56mpenetFirst release of https://helidon.io/nimaring adapter for clojure https://github.com/mpenet/nima. It's based on their alpha2, so here be dragons. #2022-11-2518:56MattiasHi, what is Helidon and/or Nima? Thanks! 😊#2022-11-2519:01mpenetHelidon is a framework to write « microservices » https://helidon.io/nima helidon currently uses netty+reactive-streams internally, nima is a rewrite using loom, initially for their webserver. Tldr: an efficient / lightweight web server (in the case of nima)#2022-11-2603:27valeraukohave you done any benchmarks?#2022-11-2607:27kingmobInteresting#2022-11-2608:42mpenetNo benchmark yet, it’s still very early (it’s a couple hours worth of work so far and the underlying lib is alpha2). I do tend to write the adapter with performance in mind tho. But that will come eventually.#2022-11-2608:44mpenetThey claim comparable/slightly-better perf as their netty/reactive based server in a presentation they did on alpha1, but I would take with a grain of salt.#2022-11-2608:44mpenetThey do work with the loom team on the implementation, I guess that helps#2022-11-2719:36Alex Miller (Clojure team)https://github.com/clojure/tools.analyzer 1.1.1 - replaces small bit of interop to make this usable from ClojureCLR • https://github.com/clojure/tools.analyzer.jvm 1.2.3 - bumps tools.analyzer dep#2022-11-2801:00kingmobTrue Grit 2.0.21 is now available! Your one-stop shop for adding resilience to your fns: circuit breakers, retries, bulkheads, timeouts, and rate limiters galore! I've bumped it up to 2.x to match the 2.x change in the underlying Resilience4j lib, but the API is completely backwards-compatible. The only breaking change is Resilience4j 2 now requires JDK 17+, so True Grit does too. True Grit now uses the MIT License. https://clojars.org/net.modulolotus/truegrit#2022-11-2815:53pez#joyride - An extension making VS Code hackable (in an almost Emacs sense of the word) was just updated - v0.0.25. Since last announcement we have the following changes: • Better performance (by using latest SCI) • Fix: https://github.com/BetterThanTomorrow/joyride/issues/108https://github.com/BetterThanTomorrow/joyride/issues/106https://github.com/BetterThanTomorrow/joyride/issues/102https://github.com/BetterThanTomorrow/joyride/issues/98`runCode`https://github.com/BetterThanTomorrow/joyride/issues/98https://github.com/BetterThanTomorrow/joyride/issues/92 (And quite a few more fixes.) We will demo some of this https://www.meetup.com/london-clojurians/events/286030325/.#2022-11-2816:41oliyHi all, martian 0.1.22 has been released. martian is a library providing abstraction over your http client, supporting Swagger, OpenAPI and your own custom definitions. https://github.com/oliyh/martian This release adds support for: • date-time and int-or-string string formats https://github.com/oliyh/martian/pull/155, thanks https://github.com/jcdlbs • Objects with no properties (implicitly anything) and associated additionalProperties support https://github.com/oliyh/martian/pull/156, thanks https://github.com/jcdlbs • hato client in martian-test https://github.com/oliyh/martian/pull/158, thanks https://github.com/bombaywalla • cljs-http-promise in martian-test https://github.com/oliyh/martian/pull/159 This release fixes: • The cljs-http stub responder in martian-test now returns a proper asynchronous contex https://github.com/oliyh/martian/pull/159 This release improves: • The martian-test code example in the README https://github.com/oliyh/martian/pull/152, thanks https://github.com/rkirchofer • The respond-with (replacing respond-with-constant) function in martian-test now accepts functions as well as values https://github.com/oliyh/martian/pull/159 #2022-11-2819:17lilactownAnnouncing the first release of https://github.com/lilactown/helix-spec-alpha, a library for writing specs for React components defined using https://github.com/lilactown/helix. Some areas of exploration/experimentation that this opens up: • Instrumenting components at dev time and getting errors when they are passed invalid props • Generative testing of components using test/check • Integration with static analysis frameworks for checking props usage Currently available via git deps#2022-11-2914:20practicalli-johnLibrary updates for the user level aliases in https://github.com/practicalli/clojure-deps-edn - providing easy access to a wide range of community tools for use with Clojure CLI (deps.edn) projects See the https://github.com/practicalli/clojure-deps-edn/blob/live/CHANGELOG.org for specific version changes Also streamlined the GitHub actions in the workflow checks (eventually all the checks will all be done in MegaLinter)#2022-11-2917:48Eric ScottVersion 0.2.0 of https://github.com/ont-app/vocabulary has been released#2022-11-3006:29mpenethttps://github.com/mpenet/mina 0.1.6 is now on clojars (previously was only via git deps, the repo name also changed)#2022-11-3013:41borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting 1.0.167: the ultimate Advent of Code edition! babashka See the https://blog.michielborkent.nl/babashka-test-runner.html blog post for how to run tests with this release. You can do this without having https://github.com/babashka/spec.alpha in your bb.edn
$ bb -e "(require '[clojure.spec.alpha :as s]) (s/valid? int? 2)"
true
Most significant changes since 1.0.165, the last release mentioned here: • Compatibility with Cognitest https://github.com/cognitect-labs/test-runner and https://github.com/clojure/tools.namespace • Add run-test and run-test-var to clojure.testhttps://github.com/babashka/babashka/issues/1433: spec source as built-in fallback. When not including the https://github.com/babashka/spec.alpha fork as a library, babashka loads a bundled version, when clojure.spec.alpha is required. • SCI: performance improvements • Better error locations for interop (https://github.com/bobisageek) • Use namespace-munge instead of munge for doing ns -> file lookup https://github.com/babashka/babashka/blob/master/CHANGELOG.md Channel: #babashka
#2022-11-3014:39Sigge LaborHello! We created a library to use https://heroicons.com as reagent components. It follows the versioning of the heroicons library itself. https://github.com/scrintal/heroicons-reagent#2022-11-3020:01oliyI wrote a little 'app' called sanakone a while ago while I was trying to learn Finnish (update: still trying to learn). It has a very basic set of rules for conjugating the different types of Finnish infinitives, and a lightweight cljs standalone webapp. Kinda fun as an example of something small, simple and easily deployed that can be used a bit like a native phone app. Code is https://github.com/oliyh/sanakone Demo at https://oliyh.github.io/sanakone/# and bonus points if you learn yourself some Finnish#2022-12-0101:15HuahaiDatalevin 0.6.26 is out. This release added explicit transactions for both Key-value and Datalog API, so that users can write arbitrary code within a single transaction to achieve atomicity, e.g. to implement compare-and-swap. Functions for rollback are also provided. https://github.com/juji-io/datalevin#2022-12-0216:48philippamarkovics🌱 https://github.clerk.garden, a simple publishing space for https://clerk.vision notebooks, is officialy available today! Find out about how it works and how to build and publish your Clerk notebooks at https://github.clerk.garden or head to #clerk-garden for questions and suggestions.#2022-12-0220:26Sam RitchieAnnouncing v0.1.0 of mathlive.cljs ! This library provides a #reagent component wrapping the https://cortexjs.io/mathlive/ equation editor. Enter math in a lovely, easy-to-use editor and extract it as LaTeX, MathJSON and many other formats. Please give the library a try via the https://mentat-collective.github.io/mathlive.cljs/ written with #clerk. • Clojars: https://clojars.org/org.mentat/mathlive.cljs • Github: https://github.com/mentat-collective/mathlive.cljs • cljdoc: https://cljdoc.org/d/org.mentat/mathlive.cljs/0.1.0 • Interactive docs: https://mentat-collective.github.io/mathlive.cljs/ https://user-images.githubusercontent.com/69635/205183928-e0fb6227-c45c-4db7-982d-c8e8a3cb3ee8.gif#2022-12-0221:12jsa-aerialAs far as you know, will this work in any reagent built cljs frontend?#2022-12-0221:18Sam Ritchie@U06C63VL4 yes it will!#2022-12-0222:00jsa-aerialcould be a nice addition to Saite#2022-12-0222:01Sam Ritchiefor sure. @U06C63VL4 i’m working on a layer beyond this that will parse MathJSON into a proper Clojure expression, so you can define proper functions etc with these fields#2022-12-0222:02jsa-aerialvery nice!#2022-12-0412:48kennytiltonBrilliant! Have you looked at automatically recognizing simple exponents, so 3-x-2 gets parsed as 3x^2? http://tiltonsalgebra.com/#mathpaper#2022-12-0416:01Sam Ritchie@U0PUGPSFR I like that a lot, and I like your whole site. I’m not sure mathlive can do that out of the box but I’ve asked over at their gitter site, so I’ll know soon! https://gitter.im/cortex-js/community#2022-12-0416:02Sam Ritchieit’s probably something we could rig up in the :on-change handler of course, detecting this and implementing that substitution#2022-12-0416:48kennytiltonOh, I was surfing too casually, did not notice you sit on top of a separate editor! Hope with the RFE pans out! But the code is tricky. eg, if the sequence were 3 x 4 2, we get 3x^42. But after typing the 3x4, the insertion caret stays on the baseline! I have actually toyed with showing two insertion points. 🙂 Fortunately this is just for basic Algebra, so the UX can cater to simpler expressions.#2022-12-0419:41Sam RitchieThe two cursor comment reminds me of this, @U0PUGPSFR: https://www.hogbaysoftware.com/posts/bike-rich-text/#2022-12-0419:41Sam Ritchiesuch a nice idea#2022-12-0420:20kennytiltonBike addresses some serious pain points!#2022-12-0503:23Sam Ritchie@U0PUGPSFR looks like you can do it with onInlineShortcut, see this page and search for the first occurrence of that string https://cortexjs.io/mathlive/guides/shortcuts/#2022-12-1013:59kennytiltonAh, yes:
'eta': {
    after:
      'nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text',
    value: '\\eta',
  },
Nice little DSL. I prolly should have done sth like that, that code is a bear! But a static translation will have a problem: in my editor, if we type "x+2" then back up to change to "x-2" and first delete the "+", we get "x2", unconventional but legal, then can type our "-". A static translation of `variable+digit' would convert that to x-squared before I could type the "-"! FYI, I am thinking of porting my (Common Lisp) maths editor to ClojureDart/Flutter, so I can do sth mathy on mobile. A CLJD version would translate nicely to CLJS.
#2022-12-1212:53kennytiltonflutter_tex was straightforward to get working, anyway. Next up is a Common Lisp->Clojure port of the editor.#2022-12-0221:43practicalli-johnPracticalli online books moving to mkdocs and material theme, starting with https://practical.li/neovim/ Content can now be edited directly via the website (via GitHub edit links )#2022-12-0222:28borkdudeLooks awesome, I'm also considering mkdocs-material for #C029PTWD3HR and if that works out, also bb#2022-12-0222:32borkdude@U05254DQM Is this out of date or is it also still using gitbook? https://github.com/practicalli/neovim/ is written in markdown and uses GitBook to generate the website via a GitHub action.#2022-12-0302:08practicalli-johnOn the contribute page, yes that should be updated. I've done a PR from my tablet using the edit ✏️ link on that page, really quite handy, especially for quick fixes.#2022-12-0419:25borkdudeA fresh release of babashka process! Clojure library for shelling out / spawning sub-processes
babashka/process {:mvn/version "0.4.13"}
The shell function is now the most emphasized function in the README (where it was previously almost undocumented) All other functions like process have been updated to support the syntax that shell supports: (shell opts? & args) This works particularly well with (apply shell "binary" *command-line-args*) Check out the new README https://github.com/babashka/process Discuss in #babashka
#2022-12-0511:49niwinzA new release of promesa library -- funcool/promesa {:mvn/version "10.0.571"} -- https://github.com/funcool/promesa A promise library & concurrency toolkit for Clojure & ClojureScript. Relevant changes (mainly focused on JVM/Clojure): • Fixes and API stabilization on promesa.exec.csp (channels & csp patterns for Clojure, that leverages vthreads) • Add mult support to promesa.exec.csp • Make promesa.exec.csp/pipe (and many other helpers) do not need internal go-block, making them viable to use in non-vthreads supporting runtime. • Allow Duration instances to be passed for schedule and many other timeout related arities. • Add genera purpose promesa.core/await! helper for uniformly wait blocking current thread an asynchronous work termination (such that Thread, CountDownLatch, or CompletableFuture, where each one implements its own mechanism and await! unifies it under single API call, do not be confused with async/await functionality) • Add mcat, merr, hmap, hcat and fnly promise composition functions that intends to be used with ->> instead of -> and focused on performance/efficiency because they a re not performing defensive unwrapping (in difference to then, handle and catch) • Add some convenience helpers for working with threads and vthreads (such that: interrupt, check interruption flag, sleeping, ...) • General code cleaning and internal efficiency improvements.#2022-12-0603:40dchelimskyCognitect Labs' https://groups.google.com/g/clojure/c/3fXGjfLNOik/m/VV901_9FAQAJ#2022-12-0606:20kingmobAnnouncing a new release of Manifold, your handy-dandy async and streaming library: https://clojars.org/manifold. As well as a few bugs and minor improvements, the big changes are: • Added windowing fns dropping-stream and sliding-stream. We've had cut-and-paste versions floating around for a while, but people keep looking for them, so they've been added. Many thanks to @rschmukler for the contribution! • Java 8 is now the minimum supported version. https://github.com/clj-commons/manifold#2022-12-0622:11bozhidarCIDER’s stacktrace analyzer has been extracted from cider-nrepl into a standalone Clojure library called Haystack https://github.com/clojure-emacs/haystack/ Big thanks for @r0man, who tackled this task! I hope that some of you will find Haystack useful!#2022-12-0718:45hlshipI'm glad you can support io.aviso/pretty stack traces. I would note that the README was a bit odd; the library is Pretty, the organization is Aviso (the company I was working at when I developed io.aviso/pretty initially).#2022-12-0718:45hlshipSo calling the format and library Aviso was just a bit jarring.#2022-12-0622:13bozhidar(did I mention that the new library can parse pretty much every Clojure stacktrace format in existence today? 😉 Good stuff!)#2022-12-0815:42borkdudehttps://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy 2022.12.08 • https://github.com/clj-kondo/clj-kondo/issues/609: typecheck var usage, e.g. (def x :foo) (inc x) will now give a warning • https://github.com/clj-kondo/clj-kondo/issues/1867: add name metadata to class usage • https://github.com/clj-kondo/clj-kondo/issues/1875: add :duplicate-field-name linter for deftype and defrecord definitions. • https://github.com/clj-kondo/clj-kondo/issues/1883: constructor usage should have name-col in analysis • https://github.com/clj-kondo/clj-kondo/issues/1874: fix name of fully qualified class usage • https://github.com/clj-kondo/clj-kondo/issues/1876: suppress . analysis from .. macroexpansion • https://github.com/clj-kondo/clj-kondo/issues/1876: suppress new analysis from (String. x) expansion • https://github.com/clj-kondo/clj-kondo/issues/1876: use namespace-munge for resolving hook files rather than mungehttps://github.com/clj-kondo/clj-kondo/issues/1896: don't consider **, *** etc. to be a dynamic vars • https://github.com/clj-kondo/clj-kondo/issues/1899: treat var or local reference as unused value when not in tail position • https://github.com/clj-kondo/clj-kondo/issues/1903: int can be cast to double • https://github.com/clj-kondo/clj-kondo/issues/1871: clj-kondo marks args in definterface as unused • https://github.com/clj-kondo/clj-kondo/issues/1879: analyze definterface more similarly to defprotocol for lsp-navigation • https://github.com/clj-kondo/clj-kondo/issues/1907: add hooks-api/generated-node? function to check if a node was generated • https://github.com/clj-kondo/clj-kondo/issues/1887, use re-find for ns groups rather than re-matches#2022-12-0822:31tengstrand#polylith, poly https://github.com/polyfy/polylith/releases/tag/v0.2.16-alpha, released. Here are a couple of the biggest news: • External Test runner • Show warning 206, if a namespace can't be parsed • Ignore empty or commented out source files#2022-12-0908:51danielcomptonClojurists Together is looking to fund more open source Clojure projects. Please apply! https://www.clojuriststogether.org/news/q1-2023-funding-round-and-survey-results/#2022-12-0909:02pezWhen is the funding period planned to start, more specifically? Trying to figure out when is the latest start given the two month delay option.#2022-12-0909:17danielcomptonI’ve just updated it to add that: > Funding would start from 1st of February but the start of funding can be delayed by up to two months.#2022-12-0909:20pezAwesome. Thanks!#2022-12-0917:59zeitsteinI thought the application deadline would be mid January https://www.clojuriststogether.org/open-source/. 😕#2022-12-0918:06seancorfield@U051KLSJF FYI, the opening paragraph of that post says "starting our next funding round for Q3 2022" -- should be "Q1 2023" right?#2022-12-0922:12danielcompton@U02E9K53C9L I need to update that page. The feedback we got was that people didn’t have enough time to clear their schedules when we announced it so close to the starting time. So we’re now opening for applications earlier to give people more time to announce#2022-12-0913:25tengstrand#C013B7MQHJQ, https://github.com/polyfy/polylith/releases/tag/v0.2.17-alpha, released. Fixes a bug introduced in 0.2.16-alpha.#2022-12-0918:05seancorfieldhttps://github.com/seancorfield/polylith-external-test-runner -- an external test runner that can be used with Polylith v0.2.17-alpha (or later) -- has its first official release v0.1.0!#2022-12-0913:42mkvlr👁️ Clerk – Moldable Live Programming for Clojure Notable improvements in this release: • ⚛️ Introduce ^:nextjournal.clerk/sync metadata annotation to automatically sync state between JVM Clojure and Clerk’s browser env. https://github.com/nextjournal/clerk/pull/253 and https://github.com/nextjournal/clerk/pull/268. • 🪗 Auto-expansion of results (opt-in via {:nextjournal.clerk/auto-expand-results? true} metadata for now) to show the shape of the data. • 🏞️ Allow setting Open Graph Metadata for notebooks. • 💅 Support for viewer CSS class customizations https://github.com/nextjournal/clerk/pull/294🌟 and many improvements & simplifications to Clerk’s SCI Environment running in the browser. And much more, get all details in the 🪵 https://github.com/nextjournal/clerk/blob/2035a1187efbc882016fc461fb124c96d2e8f672/CHANGELOG.md#012699-2022-12-02, find the release on 📦 https://clojars.org/io.github.nextjournal/clerk, read the 📖 https://book.clerk.vision, publish with 🌱 https://clerk.garden follow-up in #clerk. Try it with 🎄https://github.com/nextjournal/advent-of-clerk.#2022-12-0918:05seancorfieldhttps://github.com/seancorfield/polylith-external-test-runner -- an external test runner that can be used with Polylith v0.2.17-alpha (or later) -- has its first official release v0.1.0!#2022-12-0918:27ericdalloclojure-lsp Released https://clojure-lsp.io/ https://github.com/clojure-lsp/clojure-lsp/releases/tag/2022.12.09-15.51.10 with fixes, Improvements and new features! 🚀 Main highlights: • There is a new refactoring/code action cycle-keyword-auto-resolve, check the gif! • Finally, clojure-lsp now suggests Add import code actions, pretty useful when you know the class name but not the full package and clojure-lsp will add a :import for you • Avoid analyzing files inside ignored source-paths folders (`target` for example), which would cause find-definition/references to go to that folder wrongly, causing lots of confusion. • Improved overall https://clojure-lsp.io/, I have in mind improve it even better adding project cases and how configure lsp/your editor for the best UX! Thank you for all contributors and sponsors! gratitude For more info come to #CPABC1H61#2022-12-1117:05borkdudehttps://github.com/babashka/cli: turn Clojure functions into CLIs! v0.6.41 (2022-12-11) • https://github.com/babashka/cli/issues/52: require value specified as non-boolean to be supplied • https://github.com/babashka/cli/issues/53: support parsing negative numbers #2022-12-1119:20borkdudehttps://github.com/borkdude/quickblog: light-weight static blog engine for Clojure and babashka Instances of quickblog can be seen here: • https://blog.michielborkent.nl/https://jmglov.net/bloghttps://jdt.me/strange-reflections.html 0.1.0 (2022-12-11) • Add command line interface • Watch assets dir for changes in watch mode • Added refresh-templates task to update to latest templates • Social sharing (preview for Facebook, Twitter, LinkedIn, etc.) • Move metadata to post files and improve caching • Favicon support Thanks to Josh Glover (@jmglov) for heavily contributing in this release!#2022-12-1120:55Karol WójcikSeems this is something I was looking for ❤️ #2022-12-1204:14Alex Miller (Clojure team)New set of releases to move tools.deps.alpha to tools.deps • https://github.com/clojure/tools.deps 0.16.1264 - this is a new lib (forked from tools.deps.alpha) with namespaces changed. To switch, you'll need to update your deps and remove the alpha in your requires. • https://github.com/clojure/tools.deps.cli 0.9.10 - this is a new lib split out from old t.d.a that contains the programs in the :deps alias (which you only use via that alias so no change from a user perspective). Splitting this out will let it vary independently from tools.deps. • tools.tools 0.3.0 • Clojure CLI prerelease 1.11.1.1208 - mostly just switching to tools.deps chanages, but also sets -XX:-OmitStackTraceInFastThrow by default #2022-12-1212:23Rachel WestmacottI was just complaining to a colleague that -XX:-OmitStackTraceInFastThrow should really be on by default when he mentioned this change!#2022-12-1213:57Alex Miller (Clojure team)dumbest default setting ever!#2022-12-1214:22pavlosmelissinosHey, thanks a lot for this, tools.deps has been all but alpha all this time, so it was about time to get rid of it. The old name didn't exactly inspire confidence to non-Clojure people and newcomers. 🙂 I noticed that the add-lib3 branch is still using the old namespaces. Any near-future plans to migrate that as well or (hopefully! 🤞) integrate it with the main branch? No pressure of course, I'm just asking because I actually add that dev dependency to all of my projects 😄#2022-12-1214:35Alex Miller (Clojure team)hadn't thought about updating that yet, although I am spending a lot of time right now figuring out how to integrate it for reals, which will partially be in Clojure itself. I guess if enough people need it, I could do that update in add-libs3#2022-12-1214:41pavlosmelissinosIt's not a priority for me, I'm only using the branch to add/remove deps from the REPL during development, so I can just keep using it like I do now. For what it's worth I'd rather wait a bit more and get the functionality out of the box to be honest than have the add-lib3 branch updated sooner. 🙂 edit: it's great to hear that it's on your radar!#2022-12-1220:20borkdudeNon-alpha yay congrats! Ported the latest commits to deps.clj#2022-12-2217:37rickmoynihanonly just seen this, this is great news! partyparrot#2022-12-1223:20quollhttps://github.com/quoll/raphael: A Clojure/ClojureScript RDF Turtle parser 0.1.0 (2022-12-12) • Completely native. No external dependencies. No Java or JavaScript libraries. • Pluggable. External constructors for IRIs, Blank nodes, and Literals can all be provided.#2022-12-1223:55lilactownstarred it just because of the name#2022-12-1315:21rafaeldelboniI loved the name hahaha#2022-12-1308:04kingmobAnnouncing Aleph 0.6.0! Huzzah! Big changes are deps.edn support for non-Maven releases, better TLS config and error-handling, the ability to replace Dirigiste connection pools with custom versions, and shutdown configuration options. Plus, the usual litany of bug fixes and Netty upgrades. https://clojars.org/aleph/versions/0.6.0 https://github.com/clj-commons/aleph/blob/master/CHANGES.md#2022-12-1317:40Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1208 is now available as a stable release • Switch to tools.deps • https://clojure.atlassian.net/browse/TDEPS-234 - Always include -XX:-OmitStackTraceInFastThrow by default (but you can undo by setting -XX:+OmitStackTraceInFastThrow if you're some kind of sadist)#2022-12-1409:17bozhidarclojure-mode 5.16 is out! Details - https://github.com/clojure-emacs/clojure-mode/releases/tag/v5.16.0#2022-12-1414:25Sam RitchieAnnouncing v0.1.0 of clerk-utils. This library provides utilities that have been handy writing interactive docs notebooks like https://jsxgraph.mentat.org with #clerk, and documenting library code that won’t ship with a Clerk dependency. See the interactive docs notebook for more detail: https://clerk-utils.mentat.org • Clojars: https://clojars.org/org.mentat/clerk-utils • Github: https://github.com/mentat-collective/clerk-utils • cljdoc: https://cljdoc.org/d/org.mentat/clerk-utils/0.1.0#2022-12-1417:33Carsten BehringInteresting idea. I saw yesterday this: https://github.com/nextjournal/clerkless Can it be that both have the same goal ?#2022-12-1417:39Sam Ritchie@U7CAHM72M for 2 of the macros I have in there, yes, and clerkless will probably be a better solution! I’m going to try out both on #C01ECA9AA74 and see if I can settle on the official release#2022-12-1417:40Sam Ritchie(the other macro, cljs, is quite light and unrelated to the clerk-shim-with-no-dependencies idea)#2022-12-1617:57Ivar RefsdalI'm pleased to announce the initial release of https://github.com/sikt-no/datomic-testcontainers. It allows you to run an on-prem transactor as a container in your tests/REPL.#2022-12-1618:00Ivar RefsdalI'm pleased to announce a new release of https://github.com/ivarref/gen-fn: Generate Datomic function literals from regular Clojure namespaces. On-prem. This release adds auto conversion/coercion of function arguments into "proper" Clojure types, such that there is minimal mismatch between in-mem and remote transactor functions.#2022-12-1618:09Ivar Refsdal... And last but not least I'm pleased to announce a new release of https://github.com/ivarref/double-trouble: Handle duplicate Datomic transactions with ease (on-prem) and various Datomic transactor functions. This is a bugfix release that fixes an issue only affecting - you may have guessed it? - remote transactors. ¯\(ツ)/¯#2022-12-1721:27Dumchhttps://github.com/d00mch/DartClojure translator https://github.com/d00mch/DartClojure/releases/tag/0.2.14 is out! Fix bugs, start using widget instead of nest.#2022-12-1800:25seancorfieldHoneySQL -- Turn Clojure data structures into SQL -- com.github.seancorfield/honeysql {:mvn/version "2.4.962"} -- -- the "big ticket" item is #405: the long-requested ability to generate SQL with numbered placeholders ($1`, $2, etc) instead of positional placeholders (`?`) which means you can now use HoneySQL with the Node.js PostgreSQL driver! The release also contains a number of bug fixes: • Fix set-options! (only :checking worked in 2.4.947). • Fix :cast formatting when quoting is enabled, via PR https://github.com/seancorfield/honeysql/pull/443 https://github.com/duddlf23. • Fix https://github.com/seancorfield/honeysql/issues/441 by adding :replace-into to in-flight clause order (as well as registering it for the :mysql dialect). • Fix https://github.com/seancorfield/honeysql/issues/434 by special-casing :'ARRAY. • Fix https://github.com/seancorfield/honeysql/issues/433 by supporting additional WITH syntax, via PR https://github.com/seancorfield/honeysql/issues/432, https://github.com/MawiraIke. [Technically, this was in 2.4.947, but I kept the issue open while I wordsmithed the documentation] • Address https://github.com/seancorfield/honeysql/issues/405 by adding :numbered option, which can also be set globally using set-options!. Follow-up in #C66EM8D5H#2022-12-1810:46borkdudeWorks with #C029PTWD3HR :
$ nbb -e "(require 'honey.sql) (honey.sql/format {:select :* :from :table :where [[:= :x 2]]} {:numbered true})"
["SELECT * FROM table WHERE (x = $1)" 2]
I'm sure a couple of people will be happy with this in nbb :)
#2022-12-1918:44eccentric J@U04V15CAJ Exactly! All the node pg adapters used that format so this opens sooo many doors 🚪 #2022-12-2003:22skylizeInitial release of fgen v0.1.0 as a git dependency: Generators for test.check to create functions as testing input for higher order functions. https://github.com/skylize/fgen#2022-12-2009:34Ben SlessInitial release of keys v0.0.7 : Select and rename keys as fast as possible in idiomatic Clojure: (keys/select m ks) 2-3x faster than select-keys, with even faster options in store https://github.com/bsless/keys https://clojars.org/io.github.bsless/keys https://cljdoc.org/d/io.github.bsless/keys/0.0.7/doc/readme#2022-12-2010:54tatutany caveats or are they drop-in replacements for every corner case?#2022-12-2011:42Ben Sless@U11SJ6Q0K I think they are a drop in replacement but I haven't checked every corner case yet. I did try to not make any assumptions regarding usage. The only caveat I can think of now is that the * versions generate a lot of inlined code, so you could in extreme cases get a compiler exception for method size, especially if mixed with other code generation libraries#2022-12-2011:48tatutI was thinking that could these be sometime included into core, in the fullness of time#2022-12-2013:06Ben SlessI would hope so. Especially the solution using reduce for select-keys has relatively good performance vs. a small amount of changes.#2022-12-2012:21borkdudehttps://github.com/babashka/sci: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs SCI is used in https://github.com/babashka/babashka, https://github.com/babashka/nbb, https://github.com/nextjournal/clerk, https://github.com/BetterThanTomorrow/joyride/ and many https://github.com/babashka/sci#projects-using-sci projects. 0.6.37 (2022-12-20) • https://github.com/babashka/sci/issues/839: Performance improvement for method calls in CLJS, like (Math/sin) and (.substring "foo" 0 1), around 5 - 7x faster • Performance improvement when calling anonymous fn • Improve case performance • https://github.com/babashka/sci/issues/855: Property access in JS doesn't throw when intermediate value is nilhttps://github.com/babashka/sci/issues/842: Error metadata missing on some interop calls (https://github.com/bobisageek) • https://github.com/babashka/sci/issues/856: fix #queue [1 2 3] literal • Implement lazy-seq as macro • Implement ns as macro • https://github.com/babashka/sci/issues/844: Don't resolve cljs.core/inc in JVM env • Add case as a macro and case* as special form, rather than having case as special form • Implement and and or as macros • Implement fn, defn and defmacro as macros, while keeping fn* as special form • Implement loop as macro, while supporting loop* as special form • Implement let as macro, while supporting let* as special form • Fix js type hint on await (https://github.com/mhuebert) • Convert libsci scripts to bb tasks, include in CI multi-os (https://github.com/ikappaki) • Bump edamame (Clojure parser) • Fix benchmarking code • Fix for SCI_ELIDE_VARS #2022-12-2112:55bozhidarcider On the gloomiest of days (the Winter solstice) I'm happy to bring a ray of light and a bit joy to you with the release of CIDER 1.6 ("Buenos Aires")! Our first release in 4 months is packed with many cool improvements (see https://github.com/clojure-emacs/cider/releases/tag/v1.6.0) and is dedicated to my favorite city in South America and all my Argentinian friends! :flag-ar: 🏆 cider#2022-12-2115:55practicalli-johnMinor update to https://github.com/practicalli/clojure-deps-ednuser level configuration for Clojure CLI, providing a wide range of community tools. * :project/deps-new alias to create projects using [seancorfield/deps-new](https://github.com/seancorfield/deps-new) - project readme suggests using deps-new as a tool, although with this alias default (Edit: :exec-args ) are added so clojure -T:project/deps-new will create a playground project * :lib/clerk alias for data science note books [nextjournal/clerk](https://github.com/nextjournal/clerk) - include this alias when starting the REPL to kickstart data science experiments#2022-12-2116:29Alex Miller (Clojure team)do you mean :exec-args ?
#2022-12-2118:15practicalli-johnYes, I do... oops... I'll edit that bit for posterity. I guess I got :main-opts and :exec-args jumbled up somewhere between brain and keyboard 🙂#2022-12-2118:25lilactown🎄 Announcing https://github.com/lilactown/7-humble-guis, a WIP implementation of https://eugenkiss.github.io/7guis/tasks/ using the cross-platform desktop UI framework #humbleui and Clojure. 🎄 Currently, all but the 7th GUI is complete 😩 I started this awhile ago, then lost steam working on the cells GUI, and decided for the holidays to button it up a bit and release it publicly in its unfinished form, as it could still be useful to others. Huge thanks to @tonsky for building & maintaining HumbleUI thanks2 it's so much fun to have a super simple desktop UI framework at the ends of my REPL#2022-12-2119:08lilactownsome pictures#2022-12-2120:32Eugenlooks great!#2022-12-2120:33Eugenlooking for a project to try it out ... 🙂#2022-12-2211:59NikiThat’s awesome! Especially grid! :)#2022-12-2215:11lilactownthe grid is very naive. just a bunch of textfields nestled together 😛#2022-12-2121:05lilactown🎅:skin-tone-2: Announcing https://github.com/lilactown/dom, an extremely Simple:tm: library for declaratively creating & updating web pages in ClojureScript. 🎅:skin-tone-2: It wraps Google's extremely stable https://github.com/google/incremental-dom library, which uses no long-lived virtual DOM. -- When hacking on some dev tooling recently, I found myself wishing for a dependency-light way to build small applications that was somewhere between raw DOM manipulation and a framework like React. Google's incremental-dom seemed to provide just enough functionality for me to quickly build something interactive while still being very light in terms of code. I know that people have in the past showed interest in "non-React" libraries for building UI in CLJS. I hope it gives people some food for thought!#2022-12-2121:21slipsetFYI there is also https://github.com/cjohansen/dumdom which may or may not serve the same purpose. #2022-12-2122:12lilactownthe major difference is that there is no persistent VDOM used in town.lilac/dom, which is equivalent to saying there is no component model. you just have functions that are used to generate patches to the DOM. dumdom brings in snabbdom which, while it says is an implementation detail, does mean that it adopts the way looking at the world through the lens of components. there is a persistent "identity" that each rendered component has on the page which it uses to determine certain behavior of the diffing process. in general I think the component model is incredibly useful. I think that React's latest & upcoming changes are really taking the VDOM/component model to its obvious ends, integrating it end to end with each concern of building a web UI. sometimes I just want to twiddle some stuff on a web page though, and that's what incremental-dom is really good at and what town.lilac/dom aims to serve#2022-12-2209:44practicalli-johnThis seems like a nicer approach to building landing pages with ClojureScript, such as https://practical.li/ I will take this for a spin in the new year, thank you.#2022-12-2122:36Alex Miller (Clojure team)https://github.com/clojure/core.match 1.0.1 • MATCH-129 - fix syntax error using string literal with a / in it#2022-12-2210:48IratiAnnouncing HOP (https://gethop.dev), an open source #devops tool for Clojure(Script) developers. HOP is an opinionated yet flexible RAD platform and a tool for easily deploying to the cloud (AWS for now, on premises and other public clouds in the pipeline). We have created a #hop channel for any questions and feedback. We have leveraged this platform at http://magnet.coop for years for our own projects so we hope it’s useful for the community! Tutorial link: https://youtu.be/x1g9Pr6kSJU#2022-12-2214:53seriogahttps://github.com/strojure/undertow — first public release of new library#2022-12-2214:53seriogahttps://github.com/strojure/ring-undertow — first public release of new library#2022-12-2214:56seriogahttps://github.com/strojure/zmap version 1.0.2 as a replacement of previously announced zizzmap#2022-12-2218:47Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.9.0 8c93e0c, available as both git dep and Maven artifact • Add clojure.tools.build.api/with-project-root macro • java-command, compile-clj - TBUILD-34 - Use Clojure CLI logic in finding Java executable • Switch to tools.deps 0.16.1264#2022-12-2220:34borkdudeLooks a lot like deps.clj :)#2022-12-2220:35Alex Miller (Clojure team)hopefully!#2022-12-2220:36borkdudeI meant the CLI logic ;)#2022-12-2220:39Alex Miller (Clojure team)that's what I meant too :)#2022-12-2220:29borkdudehttps://github.com/babashka/scittle: execute Clojure(Script) directly from browser script tags via SCI! v0.5.13 (2022-12-23) • Fix reagent with-let macro with advanced compiled builds • Upgrade promesa and shadow-cljs • Fix #queue literal • SCI: performance improvements Channel #scittle#2022-12-2305:19kingmobhttps://clojars.org/org.clj-commons/byte-streams/versions/0.3.2 is out. Big change is to fix a bug where mixing libs using the old single-segment ns and the new ns result in missing conversions/transfers. Recommended for Yada users, and people not pinning their particular byte-streams dep. New Aleph release to follow shortly. • Upgrade to Manifold 0.3.0, remove unused dev deps • Update docstring on to-string not being lazy • Add basic clj-kondo support • Deprecated single-segment namespace in README examples Many thanks to @p-himik and @eugen.stan for their contributions.#2022-12-2311:58tomdhttps://github.com/weavejester/medley, a lightweight library of useful Clojure functions, released https://github.com/weavejester/medley/releases/tag/1.5.0! The main new features are two new partitioning functions which I’ve written about in a blog @finn.volkel posted on #C8NUSGWG6#2022-12-2319:43delaguardoinspired by AOC day 7?)#2022-12-2409:58tomdNo actually, this work was pre-AOC. It always gets a bit time consuming for me after the first week or so, but glad to hear the fns could come in handy.#2022-12-2410:06delaguardoyes, definitely! and thanks for the blog post. i wrote something similar for day 7 solution but my variant is way slower and less generic then yours#2022-12-2508:19danielcomptonhttps://www.clojuriststogether.org/news/clojurists-together-2023-long-term-funding-announcement/#2022-12-2515:51lreadAwesome choices, a huge congrats to all!#2022-12-2809:17CJ LindbladWell deserved @U0ETXRFEW ❤️ 🎉 #2022-12-2514:01licht1steinI have finished an initial version of a Telegram Bot library: clj-telegram-bot. Issues and contributions are very welcome. I'm still planning to add conversation support (multi step interactions that store their state), persistent interactions etc. But it's already quite usable, and what's important — data driven. https://github.com/licht1stein/clj-telegram-bot#2022-12-2712:53timonkot13https://github.com/timonkot131/clojurescript-screeps-webpack, new version of the "screeps" template. Now with a source-map support!#2022-12-2713:38robert-stuttafordwhat is 'screeps'?#2022-12-2713:53domparryTIL: https://screeps.com/#2022-12-2713:53domparryThis looks super fun.#2022-12-2714:48robert-stuttafordwell ok then!#2022-12-2817:39dchelimskyCognitect Labs' https://groups.google.com/g/clojure/c/uT7MawAr9pg/m/dg6VPknlBAAJ • fix URI parsing bug in ec2-metadata-utils (h/t @steveb8n) ◦ this makes the client work in aws lambda with snapstart • add function to instrument test double client after initialization#2022-12-3013:24Sam RitchieAnnouncing v0.2.0 of clerk-utils , a library designed to help write interactive docs like https://clerk-utils.mentat.org with #clerk. This release adds a show-cljs macro that makes it easy to use clerk with cljc files, as well as a docs page documenting how to use Clerk with a custom ClojureScript bundle: https://clerk-utils.mentat.org/dev/clerk_utils/show.html See the interactive docs notebook for more detail: https://clerk-utils.mentat.org • Release notes: https://github.com/mentat-collective/clerk-utils/releases/tag/v0.2.0 • Clojars: https://clojars.org/org.mentat/clerk-utils • Github: https://github.com/mentat-collective/clerk-utils • cljdoc: https://cljdoc.org/d/org.mentat/clerk-utils/0.2.0 #2022-12-3020:21phronmophobicDewey Search: A "not completely terrible" web page for finding clojure libraries that are hosted on github. https://phronmophobic.github.io/dewey/search.html Edit: • Added https://phronmophobic.github.io/dewey/topics.html page • Topics and authors are now clickable to show filtered view source: https://github.com/phronmophobic/dewey/tree/gh-pages#2022-12-3020:37borkdudeDear babashka friends! Just finished up writing the babashka http-client today and I think it's ready to be used. Please provide your feedback while this library is in flux so we can move it to a built-in somewhere in 2023! https://github.com/babashka/http-client
org.babashka/http-client {:mvn/version "0.0.1"}
#2023-01-0214:03Ivar RefsdalGreat stuff as always! However at my work we've had a problems when using java.net.net.HttpClient with respect to network timeouts. For example request timeout does not cover receival of the body: https://bugs.openjdk.org/browse/JDK-8258397 Not sure if this can be solved perfectly at a higher level such as babashka/http-client or not (or just mitigated).#2023-01-0214:05Ivar RefsdalI have not looked super close at it, but my personal preference as of now is to just stay away from https://java.net.http.HttpClient :-/#2023-01-0214:05borkdude@UGJE0MM0W The workaround that occurred to me also is mentioned here: > A possibility for the caller is to make use of the CompletableFuture API (get/join will accept a timeout, or CF::orTimeout can be called). IIRC - in that case, it will still be the responsibility of the caller to cancel the request. babashka http-client isn't going to fix JDK issues, unless the workaround is super obvious#2023-01-0214:05borkdudebabashka.curl and httpkit will still be available options in bb though#2023-01-0214:10borkdude@UGJE0MM0W
user=> (let [resp (http/get "" {:async true})] (deref resp 1000 ::too-late))
:user/too-late
#2023-01-0214:10borkdude
user=> (let [resp (http/get "" {:async true})] (deref resp 1200 ::too-late))
{:status 200,
#2023-01-0214:22Ivar RefsdalThat's an OK-ish workaround I think. One problem we also had is that it takes a long time before a HTTP/2 connection is marked bad/dead. Requests kept piling onto the same dead connection, so a bunch of requests (eventually) timed out, thus we had a flood of timeouts. HTTP/2 is the default as far as I know. Using HTTP/1.1 would be better in this case.#2023-01-0214:30borkdude@UGJE0MM0W I don't think so:
user=> (:version (let [resp (http/get "" {:async true})] (deref resp 1000 (delay (do (future-cancel resp) ::too-late)))))
:http1.1
#2023-01-0214:35Ivar RefsdalI think so:
Returns the preferred HTTP protocol version for this client. The default value is HttpClient.Version.HTTP_2
https://docs.oracle.com/en/java/javase/17/docs/api/java.net.http/java/net/http/HttpClient.html#version()
#2023-01-0214:35borkdudeI wonder why I'm getting :http1.1 - I'll dig deeper#2023-01-0214:35borkdudeperhaps because the other side doesn't support http2?#2023-01-0214:36borkdudeanyway, you can set it using :version :http1.1#2023-01-0214:36Ivar Refsdalother site: I guess so. I see that you are doing some http-version stuff as well#2023-01-0214:37borkdudeI updated the docs to set the version#2023-01-0214:52Ivar RefsdalAnyway... My experience on an unstable network (Azure container instances) + http2 (default) is unfortunately not very good with https://java.net.http.HttpClient. I'd be hard pressed to recommend it in such a setting. I also cannot recommend Azure container instances per se. The problem lies with the JDK of course, not babashka/http-client. I have no idea if babashka.curl/httpkit is better. clj-http is http1.1 default + timeouts that are respected AFAIK, which is what I've stuck with.#2023-01-0214:53borkdudeIf that works for you, keep using it :)#2022-12-3023:09tony.kayAnnouncing Fulcro Internationalization, version 1.0 https://github.com/fulcrologic/fulcro-i18n This library supplies features for easily internationalizing Fulcro applications: • Use your native language in the code strings • Extract those to GNU gettext POT files • Use PoEdit or other great tools to generate translations in supported languages • Dynamically load the translations per locale from your server #2022-12-3121:17tony.kayFulcro 3.6.0-RC1 https://github.com/fulcrologic/fulcro/ React 18 Support, Other internal improvements. MINOR BREAKING CHANGES (caused by changes to React). See README.adoc. These should not affect 99.9% of apps. Improvements to Transaction Processing, but stock tx processing is UNCHANGED. * Converted internal use of dynamic vars over to react context. (async render fix). * Added batched processing. * Added with-batched-reads helper. * Improved batching docstrings. * Synchronous processor can use batching (batching off by default) * Reduced logging * Fixed abort in sync tx processing * Added defnc macro to raw.components * Added react.context ns with helpers * Fixed shouldComponentUpdate default with context * Added wrappers for new react hooks * Improved hooks docstrings * should-component-update default: No longer compares props at root (performance enhancement) * Simplified denormalize time so most usages don’t need to bind it * Added React.memo wrapper in components ns. This touched a lot of internal code, so it is a release candidate. It has been tested against quite a few apps at this point. Please report issues on #fulcro#2022-12-3121:24tony.kayFulcro RAD 1.4.0 https://github.com/fulcrologic/fulcro-rad IMPROVEMENTS: * Updated guide * Added remote error detection for server form errors * Added picker options for supporting forms on pickers * Support for create-or-edit entity picker dropdowns. * Support in entity picker for quick-add. * use-form: allows use of a RAD form as a React hook, for easy rendering into arbitrary contexts. * use-report: allows use of a RAD Report as a React hook, for easy rendering into arbitrary contexts. BUGFIXES: * Fixed a bug in form debugger when using tempids * Improved form on-saved to auto-include the id-key and id of the entity that was saved (tempids otherwise are a pain) * Added a picker option to indicate the desire for a picker to also allow modal creation * Refactored and fixed on-saved UISM form code#2022-12-3121:32tony.kayFulcro RAD Semantic UI Plugin 1.3.0 https://github.com/fulcrologic/fulcro-rad-semantic-ui/ Support for rendering new RAD features: * Dropdowns for entity picking can now pop a modal to create or edit a new item. * Quick-add is supported (convert a string to a complete new entity) * NEW: Form modal. Pop a form in a modal with one line of code. * Added fo/show-header? to enable ability to hide form header/controls for cases of embedded forms#2022-12-3121:35tony.kayFulcro RAD Datomic Plugin 1.4.0 https://github.com/fulcrologic/fulcro-rad-datomic BUGFIX: Change needed for server-side form exceptions to show up as errors in RAD UI.#2023-01-0117:30practicalli-john[new] https://github.com/practicalli/doom-emacs-config - started a Doom Emacs configuration trying to follow the Spacemacs mnemonic menu key bindings, allowing an easier way to evaluate Doom Emacs for more experienced Spacemacs users The config should be fairly well documented and also adding explanations and user guide in https://practical.li/doom-emacs/ (very much work in progress)#2023-01-0120:11jmglovNice! I did the same thing, but in a really makeshift way. 😅 I’ll happily steal from your more methodical approach. 😉 #2023-01-0120:27eggsyntaxHaha you have my personal thanks for sure, I'm guessing my Doom-cluelessness was the proximate inspiration for it 😂🙏#2023-01-0316:34practicalli-john@U077BEWNQ I have been evaluating Doom Emacs for the last couple of year, but your recent questions prompted me to try again. Once I realised that workspaces in Doom were Spacemacs layouts then I felt more comfortable tweaking Doom config to my workflow. I have found Vertico easy enough to adopt over helm and so far havent found anything missing. I've changed a lot of key maps and updated a lot of keys in the clojure module (copying those I contributed to spacemacs where relevant) I've also got keycast showing keys and commands in the modeline, so I can more readily do Practicalli screencasts with Doom. Although I have changed quite a lot, the configuration is relatively simple to work with#2023-01-0316:43eggsyntaxI'm definitely hoping to give it a try at some point! Absolute basic question: the files in your repo fully replace whatever content appears by default in the DOOMDIR? Or are added to it? Or something else? Basing my guess here on https://github.com/doomemacs/doomemacs/blob/master/docs/getting_started.org#configure of the doom docs.#2023-01-0317:09practicalli-johnYes, the Practicalli Doom Emacs config can be used as a direct replacement for the .config/doom or .doom.d directory that the Doom Emacs install creates. This is separate from the clone of Doom Emacs made to .config/emacs or .emacs.d I should add some information to that effect. Not sure what happens if doom install is run with the Practicalli doom emacs config is already cloned... I'm making the Practicalli configuration 'modular' by separating out additional config into their own files. This keeps most of the changes in additional files, so its easier to tell what has been changed (hopefully)#2023-01-0321:20borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting babashka 1.0.169 (2023-01-03) • Implement ns, lazy-seq as macro • Support --dev-build flag in installation script • https://github.com/babashka/babashka/issues/1451: Allow passing explicit file and line number to clojure.test (https://github.com/matthewdowney) • https://github.com/babashka/babashka/issues/1280: babashka REPL doesn't quit right after Ctrl-d (https://github.com/formerly-a-trickster and Alice Margatroid) • https://github.com/babashka/babashka/issues/1446: add pprint/code-dispatch • Update zlib to version 1.2.13 (https://github.com/thiagokokada) • https://github.com/babashka/babashka/issues/1454: Add babashka.process to print-deps output • Update deps.clj / clojure tools to 1.11.1.1208 • Add reader-conditional function • Fix pretty printing (with clojure.pprint) of vars • Upgrade built-in spec.alpha • SCI performance improvements: faster JVM interop #2023-01-0422:35Matthew DowneyAnnouncing https://github.com/matthewdowney/rich-comment-tests (clojure, babashka) for turning normal Clojure comment forms into tests, for both running at the REPL during development and combining with clojure.test workflows / CI. Essentially a less featureful version of the excellent https://github.com/hyperfiddle/rcf/ library which uses rewrite-clj instead of macros to enable syntax much closer to "normal" rich comments. I am using it in several personal projects and I believe it is stable as of this version (v0.0.4), but I'm hoping to collect feedback and fix any bugs which might be lurking before releasing a v1.#2023-01-0509:09jeroenvandijkNice! I like the idea of annotating comment blocks and not introducing any runtime dependencies! Personally I believe the ;=> annotation is a bit fragile similar to the midje notation. And i believe emacs paredit does not always know how to deal with a line comment as the last form in a block. Because of this I'm experimenting with a custom macro (=> a b) myself#2023-01-2118:35Matthew DowneyAnnouncing v1.0.0 of https://github.com/matthewdowney/rich-comment-tests (clojure, babashka). One bugfix and no breaking changes since my last post here, and I'm happy with the API so it is now stable.#2023-01-2119:33seancorfieldLooking forward to trying this out at work (now that I'm back from vacation, I've created a JIRA ticket to track our experiment with it). I was originally excited about RCF (from HyperFiddle) but there were several problematic aspects to it -- per various issues in their repo that I discussed with them -- and your approach seems to be both simpler and also side-step those issues.#2023-01-2214:17Matthew DowneyOh very cool @U04V70XH6, let me know if you end up with any feedback or if there's any missing functionality you were hoping would be there.#2023-01-2400:59seancorfieldTried it out today. Very nice! I'll have to give the clojure.test integration some thought -- we have a Polylith monorepo so we have 150+ src folders so the test-runner with :dirs probably isn't going to work for us, but we do generate a test stub for every src file so having explicit tests that use run-ns-tests! for source files known to contain :rct/test forms might be more practical, or I could add an explicit "brick"-level test with the test-runner and the specific brick's src folder as we start to add more :rct/test forms.#2023-01-2401:05Matthew DowneyMakes sense! Let me know if there are parts of the test runner I can expose that would make this easier. Right now it's pretty https://github.com/matthewdowney/rich-comment-tests/blob/main/src/com/mjdowney/rich_comment_tests/test_runner.clj, mostly just using clojure.tools.namespace to find source files, but there's some setup of clojure.test state for test counters and output.#2023-01-2419:10seancorfieldI think we're going to settle on having an explicit component-level test for each of the components/<name>/src trees as we add RCTs to each component. If that proves to be too slow/annoying, we may switch to having a specific deftest in each *-test ns just for the matching source ns (since we have test stubs for every since source ns). I updated my VS Code/Calva config to add a custom REPL snippet to run RCTs in the current ns.#2023-01-2118:35Matthew DowneyAnnouncing v1.0.0 of https://github.com/matthewdowney/rich-comment-tests (clojure, babashka). One bugfix and no breaking changes since my last post here, and I'm happy with the API so it is now stable.#2023-01-0502:27AbhinavRelease 0.1.13 of snitch is out. Snitch is a library with a bunch of macros that inject inline defs in your clojure code, enabling a repl-driven, editor agnostic, debugging workflow. Biggest improvements are 1. If-let, when-let and other binding forms are supported 2. All the macros get interned in clojure.core & cljs.core so you don’t have to import them in every ns. And some bug fixes as well. Hat tip to @timothypratley for helping me with clojurescript related issues I had. P.S if you find issues with clojurescript please report them, (I don’t use cljs regularly so I may have missed some things) https://github.com/AbhinavOmprakash/snitch#2023-01-0623:33pezJoyride lets VS Code users hack their editor like Emacs users hack theirs. https://github.com/BetterThanTomorrow/joyride/releases/tag/v0.0.30 adds More JavaScript support. Previous releases have added support for requiring npm modules, and local JavaScript files. Now we add the ability to use JavaScript directly for your Joyride Scripts, so you can start hacking your VS Code environment without first learning any Clojure at all. Maybe that doesn't sound all too hot for Clojurians (why code without using Interactive Programming?), but we're hoping we can get some people interested in Clojure. We'll see, I guess. Please join #joyride to follow this project.#2023-01-0716:07pez#CBE668G4R is kicking off 2023 with some quality improvements https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.323 • Fix: https://github.com/BetterThanTomorrow/calva/issues/2006 • Partly fix (indenter): https://github.com/BetterThanTomorrow/calva/issues/1957 Thanks @m401 and @ahtunget for your contributions! gratitude ❤️ 🙏 Here's hoping you continue with more of them. 😃#2023-01-0917:29greglookA new release of https://github.com/amperity/dialog is available, a minimalist Clojure SLF4J logging library. Version https://github.com/amperity/dialog/blob/main/CHANGELOG.md#11104---2023-01-06 adds support for custom output and formatting functions via runtime symbol resolution, as well as logger level overrides on individual outputs, both requested features to make the library more extensible. It also includes some performance enhancements and a config-reloading bugfix. Thanks @eugen.stan for the feedback and contributions!#2023-01-0918:31daveinspacetimeWe at PrimeTeach AG are very happy to announce the initial releases (v0.1.0) of https://github.com/primeteach/specomatic and https://github.com/primeteach/specomatic-db. https://github.com/primeteach/specomatic is a Clojure(script) library to define entities and their relationships via clojure.spec, and to ask questions about them. https://github.com/primeteach/specomatic-db lets you define your entities and relationships using clojure.spec and / or specomatic and gives you an immutable SQL database that understands https://github.com/exoscale/seql and supports access control.#2023-01-2313:47mdiinThis looks very interesting. What is your experience using this regarding how database schemas evolve over time? Can you elaborate on how schema changes are turned into migrations?#2023-01-2619:30daveinspacetimeThe migration system compares the DB schema with the clojure.spec / specomatic schema and creates migrations for any missing tables or fields. This includes the history infrastructure. Changing existing fields or removing anything is not covered, that still requires manual migrations. We use the migration functions to generate SQL scripts for migratus while developing.#2023-01-0919:51ThierryCreated a fork and new version of overtone/at-at with an enhancement of being able to add a custom uid to a scheduled-job. This enables the possibility for your function to check if something has already been scheduled or not. Added some unit-tests while I was at it. All credits go to the original creator(s) and the pull-request creator(s) I cherry-picked commits from. https://clojars.org/org.clojars.loud/at-at/versions/1.4.0 (https://github.com/LouDnl/at-at)#2023-01-1009:08thomashave you picked up the PR's that solve the reflection problems?#2023-01-1009:10ThierryGood question, there were two PR's covering the same thing iirc. I cherrypicked all commits from PR's and recent forks I could find. So yes, I did. https://github.com/LouDnl/at-at/commit/64d08a6adefa148b7f87cd0d1d9a6ba29e0f615b#2023-01-1009:10thomas👍 Cool thank you!#2023-01-1100:09Sam RitchieAnnouncing v0.1.0 of leva.cljs ! This library provides a #reagent interface to the https://github.com/pmndrs/leva declarative GUI library. These panels can sync bidirectionally to a stateful atom or cursor. Please give the library a try via the https://leva.mentat.org written with #clerk. • Clojars: https://clojars.org/org.mentat/leva.cljs • Github: https://github.com/mentat-collective/leva.cljs • cljdoc: https://cljdoc.org/d/org.mentat/leva.cljs/0.1.0 • Interactive docs: https://leva.mentat.org And a quick GIF of a panel updating some reactive state:#2023-01-1104:06robert-stuttafordas a Blender learner, i approve of this UI 😄#2023-01-1104:06robert-stuttafordvery cool, Sam!#2023-01-1109:17elkenI've been really close to adding something like this myself! This looks great, lots of nice ideas for this 😄#2023-01-1112:47peterhExactly what I need for my experimental/explorative projects, thanks for doing this! clojure-spin#2023-01-1116:13IratiThe #C04F3SGPMAR wizard is here! Now you can build your next Clojure project with our new web-based HOP CLI Settings Editor. We have written a blog post explaining how we built the wizard using Babashka and Scittle. https://www.gethop.dev/post/the-wizard-of-hop-how-we-built-the-web-based-hop-cli-settings-editor-using-babashka-and-scittle#2023-01-1116:15robert-stuttafordsmall bit of feedback: the blue links on the dark blue background are really tough on the eyes 🙂#2023-01-1116:23IratiYou are right. We've changed the background, I hope it's more readable now.#2023-01-1116:33robert-stuttafordso much better!#2023-01-1117:35borkdude@U03CX2B143G nice! :) If you distribute your CLI as a .jar file then you can also install it with #babashka-bbin as a global tool - might be useful#2023-01-1117:45borkdudeThis means users could then run $ hop bootstrap instead of $ bb hop-cli.jar boostrap for example#2023-01-1117:46borkdudeThis works:
bbin install  --as hop
#2023-01-1117:46borkdude
$ hop bootstrap
Usage: bootstrap <subcommand> <options>

Subcommands
...
#2023-01-1117:46Iratiawesome, we will explore this for sure#2023-01-1314:46Asier@U04V15CAJ done: https://docs.gethop.dev/en/latest/get-started/installation/main.html Thank you!#2023-01-1314:49borkdude@U014V99QYA1 Awesome :)#2023-01-1214:53borkdudehttps://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy clj-kondo 2023.01.12 • https://github.com/clj-kondo/clj-kondo/issues/1742: new linter :aliased-namespace-var-usage: warn on var usage from namespaces that were used with :as-alias. See https://twitter.com/borkdude/status/1613524896625340417/photo/1. • https://github.com/clj-kondo/clj-kondo/issues/1914: Don't warn about single arg use when there's a second arg in a reader conditional (https://github.com/mk) • https://github.com/clj-kondo/clj-kondo/issues/1912: Allow forward references in comment forms (https://github.com/mk) See https://twitter.com/borkdude/status/1603028023565062145. • https://github.com/clj-kondo/clj-kondo/issues/1926: Add keyword analysis for edn files. • https://github.com/clj-kondo/clj-kondo/issues/1922: don't crash on invalid type specification • https://github.com/clj-kondo/clj-kondo/issues/1902: provide :symbols analysis for navigation to symbols in quoted forms or EDN files. See https://twitter.com/borkdude/status/1612773780589355008. • https://github.com/clj-kondo/clj-kondo/issues/1939: no longer warn on unused namespace that was only used with :as-aliashttps://github.com/clj-kondo/clj-kondo/issues/1911: missing test assertion linter doesn't work in CLJS • https://github.com/clj-kondo/clj-kondo/issues/1891: support CLJ_KONDO_EXTRA_CONFIG_DIR environment variable to enable extra linters after project config#2023-01-1217:21ikitommi[metosin/malli "0.10.0"] is out! Malli is a high-performance data-driven data specification library for Clojure/Script. Most notable changes: • New optional time schemas for the JVM on top of java.time: :time/duration, :time/instant, :time/local-date, :time/local-date-time, :time/local-time, :time/offset-date-time, :time/offset-time, :time/zone-id, :time/zone-offset, :time/zoned-date-time ◦ contributions for making these work with CLJS too most welcome. Discussion https://github.com/metosin/malli/issues/49. • Automatic type inferring with :enum and :=, detects homogenous :string, :keyword, :symbol, :int and :double schemas • New malli.core/coercer and malli.core/coerce to both decode and validate a value, with exception throwing & cps variants • BREAKING: re-implementation of :map-of inferring, disabled by default, configurable via options, with solid defaults • BREAKING: Prefer to real Schemas instead of predicates in inferring (e.g. :int over 'int?) • New malli.experimental.describe ns to describe Schemas in english:
(is (= "ConsCell <nullable vector with exactly 2 items of type: integer, \"ConsCell\">"
     (med/describe [:schema {:registry {"ConsCell" [:maybe [:tuple :int [:ref "ConsCell"]]]}} "ConsCell"]))))
All changes: https://github.com/metosin/malli/blob/master/CHANGELOG.md#0100-2023-01-12 Code: https://github.com/metosin/malli Big thanks to all contributors, and to the whole #CLDK6MFMK community!
#2023-01-1217:35robert-stuttafordbrilliant!#2023-01-1217:47escherizeIncredible work 🙂#2023-01-1222:27lepistaneThanks! nice#2023-01-1308:19oliyMalli is a pleasure to use, thank you#2023-01-1308:46moeNot much of announcement, but I think I mostly finished up this implementation of Algorithm W for Hindley-Milner type inference https://github.com/moea/types/blob/main/src/types/w.clj. I think it's much easier to follow (and much shorter) than the other implementations I've seen. I'll turn it into a blog post once I've added some pretty printing and tested it a bit more.#2023-01-1315:15Noah BogartThis is so cool.#2023-01-1315:16Noah Bogart@U055XFK8V seems like something you'd be interested in#2023-01-1406:48eccentric JHaving a bit of trouble following what this project does. Could you please explain it?#2023-01-1407:15moeSure. It takes symbolic expressions representing primitive constructs in the lambda calculus + polymorphic let (or "Hindley-Milner" for short) and infers the types of them using the algorithm outlined in this paper https://www.cs.uu.nl/research/techreps/repo/CS-2002/2002-031.pdf — Hindley-Milner is the same type system used by the ML family, a subset of the one used by Haskell, etc. — and basically the foundation of all type inference algorithms, if not most type systems#2023-01-2902:09dvingoI had an interesting thought, not sure if this is possible, but could you use this sort of thing to add some static typing to clojure via clj-kondo?#2023-01-2902:10dvingospecifically to enhance how it is used with malli https://github.com/metosin/malli#clj-kondo#2023-02-0200:01EddieCool stuff! I have been working towards something along the lines of what @U051V5LLP proposes for a while, but there are tricky parts associated with Clojure's data structures being more expressive than typed collections. https://github.com/erp12/schema-inference#2023-01-1323:33Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.9.1 27ff8a4 • uber - https://clojure.atlassian.net/browse/TBUILD-35 Fix error on exploding jar with / entry • uber - https://clojure.atlassian.net/browse/TBUILD-30 Apply exclusions and conflict handlers for local and git libs#2023-01-1608:19henrikMy build fails with Too many open files at clojure.tools.build.util.file$collect_files when using this version.#2023-01-1614:29Alex Miller (Clojure team)Thanks, I’ll take a look#2023-01-1801:18Alex Miller (Clojure team)@U06B8J0AJ would be great if you could test with 0.9.2!#2023-01-1807:57henrikAll good! 👌#2023-01-1414:39borkdudebabashka Introducing https://github.com/babashka/instaparse.bb - a library that is usable from babashka and wraps a https://github.com/babashka/pod-babashka-instaparse (also new) which includes support for Instaparse! babashka Github repo: https://github.com/babashka/instaparse.bb#2023-01-1607:41renewdoithttps://github.com/robertluo/waterfall A minimalist library for Apache Kafka.#2023-01-1613:05borkdudeBabashka https://github.com/babashka/fs: file system utility library for Clojure v0.2.14 (2023-01-16) • https://github.com/babashka/fs/issues/81: do not process directories in strip-ext and split-ext • Correct documentation for match/glob functions return value https://github.com/thenonameguy • Add unixify: returns path as string with Unix-style file separators (`/`) on Windows systems.#2023-01-1722:00Alex Miller (Clojure team)https://github.com/clojure/tools.build v0.9.2 fe6b140 • uber - https://clojure.atlassian.net/browse/TBUILD-30 Fix the fix here from 0.9.1 to properly close file streams - whoopsie! #2023-01-1810:42borkdudehttps://github.com/babashka/pod-babashka-buddy v0.3.3: A pod around buddy core (Cryptographic Api for Clojure). • You can now use buddy's crypto namespace, thanks to @iarenaza! See crypto https://github.com/babashka/pod-babashka-buddy#crypto • Provide macOS aarch64 binaries (for faster startup on M1/M2 architectures) See https://github.com/babashka/pod-babashka-buddy#example for a general example on how to use pod-babashka-buddy#2023-01-1810:51flowthingInitial release of https://github.com/eerohele/tab, a tool for tabulating Clojure collections.#2023-01-1811:08borkdudeNice :) I'm playing around with a local babashka-compatible version:
clj -M:babashka/dev -Sdeps '{:deps {io.github.eerohele/tab {:local/root "/tmp/tab"}}}'
I think it could work, let me know if you're interested in a few minor enhancements for bb compatibility
#2023-01-1811:08flowthingCertainly! Just let me know what those changes are and I’ll make them.#2023-01-1812:36robert-stuttafordthis is rad! be great to see this or something like this inside #C035GRLJEP8 too fyi @U5H74UNSF @U07SQTAEM#2023-01-1812:46borkdude@U0509NKGK You might already be able to use this in clerk, if this library is able to produce HTML from anything#2023-01-1812:51flowthingThe HTML Tab yields is very much tailored for Tab itself.#2023-01-1812:52flowthingBut implementing something similar (or better) in Clerk should be pretty trivial, I think. 🙂#2023-01-1814:35borkdudeIn a few minutes (after the bb master build finishes) you should be able to run tab with babashka as well! Install the dev-build with:
bash <(curl ) --dev-build --dir /tmp
#2023-01-1820:05flowthingAll right, after some quick action by @U04V15CAJ (thanks !) and some stack-blowing misadventures by yours truly, Tab now tentatively supports Babashka, too.#2023-01-1820:05flowthing(Tests forthcoming, hopefully.)#2023-01-1913:16borkdudebb 1.0.170 released with support for tab ;)#2023-01-1817:43jcoyleHappy to announce https://github.com/kushidesign/kushi. Check out the interactive UI docs at https://kushi.design/. A quickstart repo for kicking the tires can be found https://github.com/kushidesign/kushi-quickstart. Detailed description, feature list and user guide is https://github.com/kushidesign/kushi. Thoughts & feedback very welcome!#2023-01-1919:11bedersthis is lovely! Well done. Good choices#2023-01-1919:12jcoyleThank you @U628K7XGQ!#2023-01-2100:01Young-il ChooVery nice!#2023-01-2102:17jcoyleThank you @U01CUL007JP!#2023-01-2420:27leontalbothttps://www.youtube.com/watch?v=BAZpnI6HoC0#2023-01-2520:06jcoyleThank you @U07C4S0EM!#2023-01-1910:10mpenetMina 0.1.11 is out - it now uses helidon/nima 4.0.0-alpha3 (Oracle's loom based http server library) https://github.com/mpenet/mina/#2023-01-1910:14dharriganThat is very interesting! I was listening to a podcast recently all about helidon/nima. Sounds very exciting!#2023-01-1910:21mpenetit's a very interesting project indeed. There are a few others kicking the tires of loom (ex vertx) but nima is a fresh take on it and they have big goals. Plus the fact it's built by oracle (with access to loom devs directly) is quite encouraging.#2023-01-1910:35mkvlrglad to see it! Do you have plans to add support for WebSockets?#2023-01-1910:42mpenetYes that will come next #2023-01-1911:19mkvlrhttp-kit’s api there is something to maybe take inspiration from, I find it nice & simple#2023-01-2006:32dominicmHttp kits API has problems with back pressure iirc?#2023-01-2008:19henrik@U09LZR36F It does? That’s good to know. Although, is it a problem with the API or the implementation of it? I think @U5H74UNSF maybe means the UI, rather.#2023-01-2008:45dominicmI think it wasn't possible to solve because of the API#2023-01-2012:41henrikAh, interesting.#2023-01-2012:42henrik@U11EL3P9U Sounds interesting, could you share the podcast/episode?#2023-01-2013:19dharrigan@U06B8J0AJ sure, here you go #2023-01-2707:18henrikThat was an interesting podcast. I’ve seen different opinions on the impact of native green threads on Clojure here and there. Some seem to mean that core.async is enough, and that this will have no impact on us. That seems a little dubious for me. Clojure has always tried to tap into the underlying platform where possible, and ignoring the most monumental shift in the JVM for a long, long time would be shortsighted imo. Nevertheless, I suppose we’ll end up exposed to it one way or another anyway, regardless of core.async, via libraries like this one, or via the new incarnation of Jetty etc,#2023-01-2708:35mpenetcore.async will still be relevant, loom doesn't give you (by itself) any way to do some tricky composition with fibers. There's "Structured Concurrency" but it's still in flux I think (haven't look at it in a while), think about the kind of stuff we do now with alt! and channels in general. So I think we're more likely to see some level of integration with loom in core.async (a/thread variant, re-implementation of go or go variant based on it, stuff like that).#2023-01-2709:43henrikLoom and and the JVM green threads aren’t the same thing, though. I understand Loom as basically a structured concurrency solution on top of the JVM green threads, so essentially an alternative to core.async. I guess I may have misinterpreted the online discussions if those were talked about interchangeably.#2023-01-2710:01mpenet"structured concurrency" has a strong meaning. vthreads is one thing, and sc a continuation of the work to allow to use vthreads (& co) with the common patterns we use in the "async" world, (err handling, tasks interruptions etc). They are actually 2 different jep that make loom (so far)#2023-01-2710:36henrikYeah, this is why I feel like green/virtual threads is a “wow” moment for the JVM, while my impression of Loom so far is kind of “well, nice for Java users!”#2023-01-2710:39henrikI don’t really know that this is true, but I feel like interoperability should better when green thread solutions speak the same low-level language, essentially, rather than relying on custom solutions for each implementation. It seems like they have something coming to stop file system operations from hogging the underlying OS thread (I wasn’t even aware that this was an issue previously). I’m guessing that this will presume JVM-native green threads though.#2023-01-1912:09HuahaiDatalevin 0.8.0 is out - this release significantly improves the data ingestion speed and reduces index size of the built-in full-text search engine, with 5X speed improvement and 10X space reduction for the default setting; among several other bug fixes and improvement. https://github.com/juji-io/datalevin#2023-01-2011:18oliyHi all, I made an emacs integration for borkdude/carve. It lets you run carve with a simple key binding and opens a result buffer where you can navigate to the results and add them to your ignore file with a single keystroke. Any feedback or PRs welcome, as always. Enjoy! https://github.com/oliyh/carve.el#2023-01-2011:20borkdudeCool! Feel free to make a PR against carve to document this project#2023-01-2011:27oliyhttps://github.com/borkdude/carve/pull/66 🙂#2023-01-2011:31borkdudemerged#2023-01-2012:42borkdudehttps://github.com/babashka/neil: a CLI to add common aliases and features to deps.edn-based projects See the https://blog.michielborkent.nl/new-clojure-project-quickstart.html blog post for a gentle introduction into neil. 0.1.48 (2023-01-20) • Print a message and exit when the github rate-limit is reached (https://github.com/babashka/neil/issues/136) (https://github.com/russmatney) • Friendlier env vars for neil github token usage (https://github.com/babashka/neil/issues/136) (https://github.com/russmatney) ◦ BABASHKA_NEIL_DEV_GITHUB_USER -> NEIL_GITHUB_USERBABASHKA_NEIL_DEV_GITHUB_TOKEN -> NEIL_GITHUB_TOKEN The old env vars are left in-place as a fallback, but may be removed in a future version. • neil dep add: Always write library names as namespaced symbols (https://github.com/teodorlu) ◦ Old behavior: neil dep add http-kit writes http-kit {:mvn/version "2.7.0-alpha1"} to deps.edn ◦ New behavior: neil dep add http-kit writes http-kit/http-kit {:mvn/version "2.7.0-alpha1"} to deps.edn#2023-01-2014:23stathissiderisbb-dialog: a new library to easily make your babashka scripts interactive! https://www.pixelated-noise.com/blog/2023/01/20/bb-dialog-announcement/index.html - all credit goes to @jarcane#2023-01-2017:20Benjaminthe deps.edn snippet is missing a " . Looks nice I am trying it#2023-01-2017:21stathissideris@U02CV2P4J6S thanks, will fix asap!#2023-01-2100:48practicalli-john❤️ ncurses ❤️#2023-01-2017:15Alex Miller (Clojure team)https://github.com/clojure/data.int-map 1.1.0 - A map optimized for integer keys • DIMAP-17 - use singletons for empty int maps and sets - thanks Josh Lemer • DIMAP-16 - fix equals and equiv don't compare equals with Java maps/sets - thanks Andy Fingerhut • DIMAP-18 - fix empty doesn't preserve meta - thanks Josh Lemer • DIMAP-7 - fix minor typos in README and docstring - thanks Ben Cook • Remove unused ArrayList allocation - thanks Josh Lemer#2023-01-2115:38geraldodevInvoker of MyBatis migrations, a file based native sql migrator from old glorious java time that really works. https://gist.github.com/geraldodev/f4cc25376331ebd37d2eb8a4d3ccf8a9#2023-01-2121:47lispycloudsHot on the heels of bb-dialog, announcing https://github.com/lispyclouds/bblgum: A very simple and tiny wrapper around the awesome https://github.com/charmbracelet/gum making your #babashka and clojure CLI code more glamorous! ps: Is there a smaller lib than this? Seriously, look at its source! 😅 Have a spin, any and every feedback is welcome!#2023-01-2121:57Noah BogartThis is so cool! Thanks for writing it#2023-01-2122:49Cora (she/her)this is really nice! It's simple enough that I could see it working with other tools too, maybe#2023-01-2122:53lispycloudsyep! its a glorified cli cmd formatter 😅 some of the gum opinions and quirks leak out but not much. was debating whether this should be a lib or just a gist!#2023-01-2122:55nateGlad it's a lib#2023-01-2209:04pezIt could almost fit in a tweet.#2023-01-2304:26KeesHmm.. Almost as good a name as Bazooka 😉#2023-01-2311:13Anders EknertAnnouncing https://github.com/anderseknert/ring-clr, which as the name implies, is a ClojureCLR port of the ring library. Made mostly to learn what writing a larger project for ClojureCLR would entail, and to serve as an example of what such a project might look like (as I found almost no such examples myself). A blog on the topic will follow later. Feedback much appreciated, and if you want to discuss ClojureCLR in more detail, I’m in the #C060SFCPR channel along with those who actually know something about it 😅#2023-01-2314:40dimovichhttps://github.com/thi-ng/geom/ Has finally reached version 1.0.0.#2023-01-2318:30Sam RitchieAnnouncing v0.23.0 of the #sicmutils computer algebra system! This release concludes the port of all “mechanics” physics-related code from original “scmutils” Scheme library that started all of this. NOTE that this will be the final release before extracting most of the project out and renaming it the “Emmy Computer Algebra System”. • Clojars: https://clojars.org/sicmutils/sicmutils • release notes: https://github.com/sicmutils/sicmutils/releases/tag/v0.23.0 • Come chat or ask questions over at #sicmutils , or #mentat-collective for Emmy + associated project development going forward! Cheers!#2023-01-2413:49delaguardohttps://github.com/DotFox/jsonista.jcs an extension for https://github.com/metosin/jsonista to make generated json compliant with RFC 8785 and useable for cryptographic operations.#2023-01-2416:14Mark WardleAnnouncing https://github.com/wardle/hermes - SNOMED CT medical terminology server and library, in use now in many countries (!), including UK supporting user-facing clinical applications as well as used in a number of clinical research projects. Since the last announcement here, changes: Native support for Apple Silicon; Much improved command-line operation; Even faster import and processing; Minor fixes and improvements, including rejigging internal namespace structures; Added namespace visualisation to documentation.#2023-01-2416:14Mark WardleThanks to https://github.com/greglook/clj-hiera for the nice namespace visualisation (helping spot weirdness in namespace relationships).#2023-01-2416:16Mark WardleAnd I discussed how I've used hermes (and other Clojure-based work)( for a project for the European medicines regulator at reClojure 22: https://www.youtube.com/watch?v=2HQSAtmVbAU#2023-01-2422:34kennytiltonWould the link https://www.nlm.nih.gov/healthit/snomedct/index.html behind "SNOWMED-ST" help dummies like me? 🙂 Hmm, I have always beat on the http://FDA.GOV (?) adverse reactions endpoints in my async demos. I am guessing Hermes will take me to another level. mxWeb needs a demo project. Gotta go check if snomed needs a decent, programmable browser...#2023-01-2509:19Mark WardleThanks @U0PUGPSFR - you should be able to download the US edition from the NLM - there are licensing requirements that mean you'll probably need to sign up to your national release centre - I don't set those licensing requirements of course - but once you have downloaded an edition, or two, then you can use hermes to import and run a local, or cloud based server. We run on local server infrastructure in one facility, but I know of others using Google Cloud Run for example, and I have another running on AWS for another project, and for analytics, I use running locally. Let me know if you have any issues and I'll try to help!#2023-01-2515:35kennytiltonThanks! I got as far as the licensing requirements and punted. 🙂 Thx for the offer of help, tho!#2023-01-2417:18wilkerlucioFirst release of Pathom 3 this year, [com.wsscode/pathom3 "2023.01.24-alpha"] is out! This release fixes some issues that were pending for a while: • Fix multiple inclusions of attribute error resolver (issue #175) • Fix stack overflow on nested attribute cycles (issue #168) • Fix batch waiting execution order (issue #169) Thanks for all the users that reported and helped me debug those! https://clojars.org/com.wsscode/pathom3#2023-01-2418:15borkdudehttps://github.com/borkdude/edamame: configurable EDN and Clojure parser with location metadata and more 1.1.17 • Add parse-next+string for reading next value + the read string (analog to read+string in Clojure) #2023-01-2418:18djblueThis was super quick! ❤️#2023-01-2418:31borkdudeAdding it to SCI now#2023-01-2418:32borkdude@U1G869VNV done#2023-01-2418:32borkdudeI assume you can use SCI as a git dep for the time being, right?#2023-01-2500:44djblueI bumped the version, but now I'm seeing #object[Error Error: Can't dynamically bind non-dynamic var #'clojure.core/*3] . Only switched to the new reader and parsing fn :thinking_face:#2023-01-2508:06borkdudeThis doesn’t ring a bell. From what SCI version did you upgrade?#2023-01-2509:03borkdudeRepro welcome and I'll look into it#2023-01-2516:31djblueI think it might be a combination of https://github.com/babashka/sci/commit/3b82c930f09a65ac6c5d472383d171ffdf3bf905#diff-faebb48a23c0728ab5401da8d8a73473dfb546b9c04cf37f0913fc731f7a725e change with these defs in https://github.com/clojure/clojurescript/blob/r1.11.60/src/main/cljs/cljs/core.cljs#L207-L221 which differer slightly from the https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L6323-L6341 bindings :thinking_face:#2023-01-2516:50borkdudeso those aren't dynamic, right#2023-01-2516:50borkdudeand you are binding them in portal?#2023-01-2516:51borkdudeyou can do this:
(alter-meta sci/*1 assoc :dynamic true)
#2023-01-2516:52borkdudeor use sci/alter-var-root instead of binding to change them#2023-01-2516:54borkdudethe latter is what I'm doing in CLJS SCI REPLs#2023-01-2510:30borkdudeIntroducing clj-kondo-bb: invoke clj-kondo from babashka scripts (or as a babashka one liner)! clj-kondo babashka https://github.com/clj-kondo/clj-kondo-bb#2023-01-2515:09seancorfieldio.github.seancorfield/build-uber-log4j2-handler {:git/tag "v2.19.0" :git/sha "6c4a14a"} -- A conflict handler for log4j2 plugins cache files for the uber task of tools.build. -- https://github.com/seancorfield/build-uber-log4j2-handler • The version number reflects the underlying log4j2 version being used (for the first time) • Since I am retiring my build-clj wrapper, I am raising the profile of this conflict handler separately: if you build uberjars with tools.build and you have multiple dependencies that provide formatting plugins for log4j2, you need this conflict handler to merge them correctly! 🙂 Follow-up in #tools-build#2023-01-2521:59Sam RitchieAnnouncing v0.1.0 of mathbox.cljs ! This library provides a #reagent interface to the stunning https://github.com/unconed/mathbox WebGL mathematical visualization library. See http://mathbox.org for a directory of all of the crazy stuff you can do with MathBox. Please give the library a try via the https://mathbox.mentat.org written with #clerk. • Clojars: https://clojars.org/org.mentat/mathbox.cljs • Github: https://github.com/mentat-collective/mathbox.cljs • cljdoc: https://cljdoc.org/d/org.mentat/mathbox.cljs/0.1.0 • Interactive docs: https://mathbox.mentat.org • Questions / discussion in #mentat-collective Finally, check this page out for a wild example of the kind of interactivity possible with mathbox.cljs and leva.cljs: https://mathbox.mentat.org/dev/mathbox/examples/math/pq_knot.html#2023-01-2522:04Alex Miller (Clojure team)https://clojurians.slack.com/archives/C03RZMDSH/p1674684121908009 with new https://blog.datomic.com/2023/01/Query-Stats.html feature!#2023-01-2605:53pfeodrippeRecife (It’s a model checker on Top of TLC (you can basically write formal specifications and run them)) (https://github.com/pfeodrippe/recife) has a new version (`0.9.0`), there are tons of new features and perf improvements. • https://clojars.org/pfeodrippe/recife • Examples at https://github.com/pfeodrippe/recife/tree/master/test I will document things in a new guide (generated with Clerk BTW), check out https://recife.pfeodrippe.com (lots of TODO). • Perf improvements (~5x), still there is still a long way (~10x) to achieve TLC performance, but small steps) • New helpers namespace, convenient macros for usage at your own peril (recommended) (see a recent https://github.com/pfeodrippe/recife/blob/master/test/recife/example/readers_writers.clj#L50) ◦ https://www.hillelwayne.com/post/action-properties/ ◦ More powerful https://www.hillelwayne.com/post/fairness/ • Added new docs (using #clerk) that I will hopefully have more time to work with • Added support for TLC simulate and generate commands ◦ Generate was introduced recently by the TLC folks to support statistics, and, ofc, we can use Clerk to generate them in real-time, see https://www.youtube.com/watch?v=2LsZ2f3WZF4&amp;feature=youtu.be ▪︎ Also, check some https://github.com/pfeodrippe/recife/blob/master/test/example/knuth_yao_die.clj#L29 • Etc #2023-01-2606:09robert-stuttafordsmall recommendation: add a one paragraph 'what is this?' intro at the top of the readme 🙂#2023-01-2606:12pfeodrippeWill do, thanks, Robert!!#2023-01-2607:11borkdudeAnd at the top of this post#2023-01-2613:30pfeodrippeAdded here, thanks! #2023-01-2610:38borkdudehttps://github.com/borkdude/carve: remove unused Clojure vars clj-kondo babashka 0.3.5 • Upgrade clj-kondo version • Make babashka compatible by using the https://github.com/clj-kondo/clj-kondo-bb library • Discontinue the carve binary in favor of invocation with babashka. Instead you can now install carve with https://github.com/babashka/bbin: bbin install io.github.borkdude/carve • Implement https://github.com/babashka/cli integration • Implement --help#2023-01-2612:59ericdalloclojure-lsp https://clojure-lsp.io/: IDE and CLI development tool Released https://github.com/clojure-lsp/clojure-lsp/releases/tag/2023.01.26-11.08.16 with lots of improvements and new features! 🚀 Main highlights: • clojure-lsp now understand edn files, making most features work out of the box, like navigate to/from keywords and symbols (gif) • Navigation of quoted symbols (e.g. 'clojure.core/inc) now works • Lint now consider edn files, not only clj* ones. • Tweaks across multiple features, renaming, completion, semantic tokens, code actions. Thank you for all contributors and sponsors! gratitude For more info, come to #CPABC1H61#2023-01-2613:02pezSo sweet. Thanks for providing! gratitude ❤️ 🙏 Navigate to quoted symbols, yummy!#2023-01-2613:02borkdudeHey, I implemented that! 😃#2023-01-2614:30robert-stuttafordsweet!#2023-01-2617:27hissyfitAnnouncing https://gitlab.com/hissyfit/lein-gitlab-cart, a Leiningen plugin that enables projects to access and deploy to GitLab package registries. • Clojars: https://clojars.org/net.clojars.hissyfit/lein-gitlab-cart • GitLab: https://gitlab.com/hissyfit/lein-gitlab-cart #2023-01-2618:28Sam RitchieAnnouncing v0.1.0 of Mafs.cljs ! This library provides a #reagent interface to the https://mafs.dev 2d interactive mathematical visualization library, all backed by SVG. Please give the library a try via the https://mafs.mentat.org written with #clerk. • Clojars: https://clojars.org/org.mentat/mafs.cljs • Github: https://github.com/mentat-collective/mafs.cljs • cljdoc: https://cljdoc.org/d/org.mentat/mafs.cljs/0.1.0 • Interactive docs: https://mafs.mentat.org • Questions / discussion in #mentat-collective Finally, here’s an example of an interactive function graph built with Mafs.cljs:#2023-01-2618:29Sam RitchieI went pretty wild with the number of components on http://mafs.mentat.org, so apologies for the slow loading time 🙂 I’ll pick that notebook apart and make the load more manageable in the coming days#2023-01-2618:29eggsyntaxLots of goodies from you this week! 👏 😄#2023-01-2618:29Noah BogartA+ name haha#2023-01-2618:31Sam Ritchie@U077BEWNQ haha yes! next step is pushing some changes to my function compilation in the computer algebra system… then things will get really wild with live-updateable versions of simulations like this https://emmy-viewers.mentat.org/src/phase_portrait.html#2023-01-2618:37eggsyntaxOoooh, very cool :star-struck:#2023-02-0320:11Bobbi TowersIf this had existed, I wouldn't have had to make mine in hand-coded SVG https://github.com/BTowersCoding/trig#2023-02-0320:11Sam RitchieVery artisanal!!#2023-02-0320:12Sam RitchieThat’s awesome, clearly we’ve got the same ideas in mind… see http://mathlive.Mentat.org for another piece here #2023-02-0320:13Bobbi TowersI've been meaning to check out your stuff for the longest time#2023-02-0320:15Sam RitchieI’ll have a template out soon that will make it feasible to actually add “how to use with Clerk” guides to each project that should make it easier… but yeah anything along these lines that you’ve been wishing for or need for your own work, let me know @U8LB00QMD #2023-02-0320:18Bobbi TowersI just started learning mathematics about 4 years ago, and at the time I had to use other languages for CASs (eg. Mathematica, SymPy, etc.) and attempting to port things to Clojure... basically what you're doing but way worse 😆#2023-02-0320:19Sam RitchieAmazing how much you learn trying to port stuff though right? #2023-02-0320:19Sam RitchieWe’re the lucky ones, even if the tools turn out to be useful #2023-02-0320:20Bobbi Towersthat's what's kept me from trying emmy thus far, because I'm emotionally invested in my janky little toys#2023-02-0320:21Sam RitchieFeel free to steal pieces too and rewrite them! #2023-02-0320:21Sam RitchieThat’s the idea behind the overboard docs in many of the namespaces #2023-02-0320:24Sam RitchieThe python stuff is the janky toy set ;)#2023-02-0320:26Bobbi Towerseventually I want to use emmy to develop an extremely beginner-level maths curriculum, to serve as a gentle onramp for it#2023-02-0320:32Bobbi Towers> The python stuff is the janky toy set 😉 Yeah I ran into issues with SymPy fairly early on and got stuck. I think the simplify function was kind of broken#2023-01-2711:31pezcalva Calva https://github.com/BetterThanTomorrow/calva/releases/tag/v2.0.327 is out. 🚀 It contains a major update to the clojure-lsp integration. Calva now supports multi-clojure-projects where there is no governing project file for all the projects. Thanks @m401! 🙏 ❤️ See https://calva.io/clojure-lsp/ to see how it works now. (For most users, it should work just as before. This change should affect mostly for user who need the extra control.) Also, thanks @ahtunget for continuing your quality sweeping! 🙏 ❤️https://github.com/BetterThanTomorrow/calva/pull/2020 • Fix: https://github.com/BetterThanTomorrow/calva/issues/934 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1706 • Fix: https://github.com/BetterThanTomorrow/calva/issues/1977#2023-01-2712:38borkdudehttps://github.com/borkdude/jet: CLI to transform between JSON, EDN, YAML and Transit using Clojure. 0.4.23 (2023.01.27) • https://github.com/borkdude/jet/issues/123: Add base64/encode and base64/decode • Add jet/paths and jet/when-pred • Deprecate interactive mode • Deprecate --query in favor of --thread-last, --thread-first or --func #2023-01-2712:43borkdude#2023-01-2713:14sheluchinThanks, @U04V15CAJ. I've been using Jet more often lately and it's quite handy.#2023-01-3011:19borkdudehttps://github.com/borkdude/quickblog: light-weight static blog engine for Clojure and babashka Instances of quickblog can be seen here: • https://blog.michielborkent.nl/https://jmglov.net/bloghttps://jdt.me/strange-reflections.html 0.2.3 (2023-01-30) • Improve visualization on mobile screens (https://github.com/MatKurianski) • https://github.com/borkdude/quickblog/issues/51: Enable custom default tags or no tags (https://github.com/formsandlines) • Enable use of metadata in templates (https://github.com/ljpengelen) • Replace workaround that copies metadata from api/servehttps://github.com/borkdude/quickblog/issues/61: Add templates that allow control over layout and styling of index page, pages with tags, and archive (https://github.com/ljpengelen) • Preserve HTML comments (https://github.com/ljpengelen) • Support showing previews of posts on index page #2023-01-3013:01elkenQuickblog looks really nice, is there any interest in adding support for blogs via org-mode?#2023-01-3020:31borkdudeI guess this depends on the availability of a good org-mode parser that is compatible with clojure /bb (but wrapping it in a pod can also work)#2023-01-3020:32borkdudeI spotted this lib https://github.com/bnbeckwith/orgmode but I'm not sure how good it is#2023-01-3020:32borkdudeI also spotted https://github.com/theiceshelf/firn which was first written in clojure but now in Rust#2023-01-3020:57elkenYeah I found those, the former doesn't look "complete" but should be good enough for a simple blog, hmm#2023-01-3110:39borkdude@U043RSZ25HQ Well, I'm fine with some experimental PR that adds org-mode support using that lib, but no promises :)#2023-01-3110:39elkenI'll see what I can draft this week 🙂#2023-01-3110:39borkdudeWorst case you would end up with a fork that you can use personally, but some real world experience writing posts before merging it would make sense as if this lib is immature I would end up with support issues#2023-01-3110:40elkenMy site is due a rewrite anyway so I'm fine being the guinea pig haha#2023-01-3015:44zalkyHey folks, there is now an embedded dart-sass compiler and watcher for Clojure: • Wrapper around the https://github.com/larsgrefer/dart-sass-java • Aims to be a drop-in replacement for the deprecated https://github.com/Deraen/sass4clj • Gives you access to classpath resources and webjars Hope it is helpful! :rightwards_hand: 🎁 https://github.com/zalky/dart-sass-clj#2023-01-3015:59robert-stuttafordoh man this will be amazing if it works with our .scss herd. thanks for doing this @U0HJK8682!#2023-01-3016:08zalkyHappy to do it. Let me know if you run into issues!#2023-01-3106:29flowthingThank you for making this, and especially for making it a drop-in replacement for sass4clj!#2023-01-3017:57lreadrewrite-clj 1.1.46 - Rewrite Clojure code and edn Highlights from the https://github.com/clj-commons/rewrite-clj/blob/main/CHANGELOG.adoc#v1146: • added new rewrite-clj.zip functions of-string* and of-file*, these are versions of of-string and of-file that do no auto-navigation (thanks @jacob.maine for the analysis work!) • a lazy sequence now coerces to a rewrite-clj list node (thanks @borkdude!) • implement equality for seq nodes (thanks again @borkdude!) • exceptions thrown while reading now include :row and :col keys in ex-data (thanks @ferdinand!) • and... a nice docstring typo fix (thanks @porkostomus!) rewrite-clj is one of the many projects under the loving care of https://github.com/clj-commons.#2023-01-3105:04tony.kayFulcro 3.6.0 https://github.com/fulcrologic/fulcro • Support for React 18 • Added batched processing. • Added with-batched-reads helper. • Improved batching docstrings. • Synchronous processor can use batching (batching off by default) • Reduced logging • Fixed abort in sync tx processing • Added defnc macro to raw.components • Added react.context ns with helpers • Fixed shouldComponentUpdate default with context • Added wrappers for new react hooks • Improved hooks docstrings • Simplified denormalize time so most usages don’t need to bind it • Added React.memo wrapper in components ns.#2023-01-3105:16zmFirst release of the Bosquet LLM operations library with support for prompt composition and completion via OpenAI API. It is built on top of Selmer to get great templating functionality, and Pathom to resolve dependencies between prompt components. https://github.com/zmedelis/bosquet#2023-01-3106:39kuzmin_mMy https://darkleaf.github.io/di/ is now in its second release (2.0.0). Check out https://darkleaf.github.io/di/notebooks/integrant.html with Integrant.#2023-01-3111:43borkdudehttps://github.com/borkdude/lein2deps: A leiningen project.clj to Clojure CLI deps.edn converter. 0.1.0 • lein lein2deps plugin. See https://github.com/borkdude/lein2deps#lein-plugin. • https://github.com/borkdude/lein2deps/issues/7: maintain order of deps in project.clj and no namespacing of maps • https://github.com/borkdude/lein2deps/issues/2: accept regex in project.clj when safe-parsing • https://github.com/borkdude/lein2deps/issues/3: add clojure -Ttool support • https://github.com/borkdude/lein2deps/issues/4: convert :repositories to :mvn/repos • Add "resources" automatically to :paths • Improve quality of generated deps.edn (https://github.com/jeroenvandijk) You can now use the leiningen plugin to automatically synchronize your project.clj with a deps.edn. Add:
:plugins [[io.github.borkdude/lein-lein2deps "0.1.0"]]
to your project.clj and then run:
lein lein2deps --write-file deps.edn --print false
To run the plugin on any invocation of lein, add it to :prep-tasks:
(defproject my-project "0.1.0"
  :plugins [[io.github.borkdude/lein-lein2deps "0.1.0"]]
  :dependencies [[org.clojure/clojure "1.11.1"]]
  :prep-tasks [["lein2deps" "--write-file" "deps.edn" "--print" "false"]])
#2023-02-0110:34genmeblogCool! Does it include contents of ~/.lein/profiles.clj?#2023-02-0110:46borkdudeNo it doesn't#2023-02-0110:51genmeblogOk, it would be cool. A lot of defaults for dev profile I keep there (also some credentials and other common configs). Maybe I expect too much but it would be great to have complete lein to deps.edn migration tool.#2023-02-0110:52borkdudeThis is for managing a project, not for managing a system with global config#2023-02-0110:52borkdudeMostly for libraries that you want to manage with lein but also expose to deps.edn users (or as a first step for migrating towards deps.edn)#2023-02-0110:53borkdudeIf you have ideas on what a tool like this should do with profiles, I'm still interested#2023-02-0111:14genmeblogGenerally speaking I would be interested in kind of drop-in replacement for lein (let's say a vanilla version without plugins). So not only pure deps but also building, compiling (also with java), installation, jar, deploy, test run, etc... I know all of this is doable with current tooling but migration is not as easy as it should be.#2023-02-0112:18borkdude@U1EP3BZ3Q In that case I would take a look at this: https://blog.michielborkent.nl/new-clojure-project-quickstart.html I can set up a new project with uberjar + deploy in seconds using #C03KCV7TM6F#2023-02-0219:50genmeblogThanks, I know that. It's still a subset of my needs and is better for a new project than existing one with lein.#2023-01-3115:13zalkyNew: Coding on the fly, from take-off to landing, with a tool.deps build library: 1. Power up your deps.edn aliases: ◦ Run multiple concurrent functions via merged deps aliases in the same runtime ◦ A simple way to load extra namespaces ◦ Merge in environment variables (opt-in via peer dependency) 2. Rock-solid live reloading of code and your running application: ◦ Fork of clojure.tools.namespace that fixes https://clojure.atlassian.net/browse/TNS-6 which greatly improves c.t.n robustness (a patch has been submitted) ◦ Choose how to reload dependent namespaces: eagerly or lazily ◦ More robust error handling, recovery and logging during component lifecycle methods ◦ Cleanly shutdown your application on interrupt signals Hope it is helpful! :rightwards_hand: 🎁 https://github.com/zalky/runway#2023-01-3115:22Alex Miller (Clojure team)Is TNS-6 something that could just be moved forward? No one is really actively looking at TNS stuff right now. Would be happy to do so if that means not needing to fork#2023-01-3115:23zalkyI've been using it regularly for a couple of years with no issues. And it's a one-liner.#2023-01-3115:23Alex Miller (Clojure team)Fogus or I can take a look at it on Friday#2023-01-3115:31Daniel JompheThe documentation seems quite extensive, full of value-laden tips. Thanks for sharing!#2023-01-3115:50zalkyHappy to do it, hope people find it useful!#2023-01-3116:13wilkerlucio[com.wsscode/pathom3 "2023.01.31-alpha"] is out! This release contains some significant bug fixes, specially around batching and nested inputs! Thanks for all the community for sending and helping with the debug of those! • Fix map container handling on runner (issue #176) • pf.eql/data->shape now takes ::pcr/map-container? into account • Disregard ident values on cache keys for the planner (issue #182) • Fix stack overflow on planning nested attribute cycles on dynamic resolvers (issue #179) • Fix name reporting on invalid config for resolvers and mutations (issue #181) • Fix missing data on nested batches (issues #173 & #177) • Fix planning issue when optimizing OR subpaths (issue #170) • Index nested attributes (issue #167) https://clojars.org/com.wsscode/pathom3#2023-01-3116:24dchelimsky{nubank/matcher-combinators {:mvn/version "3.8.0"}} is out! Thanks to @phillipmates and @dpassen1 for some nice improvements: - Add seq-of matcher, which takes a matcher, successfully matching when each element matches the provided matcher. - Add any-of matcher, which takes any number of matchers, successfully matching when at least one matches. - Add all-of matcher, which takes any number of matchers, successfully matching when all match. - Add 2-arity pred matcher where the second argument is a description text. - Useful for mismatch messages when the pred is an anonymous function. - Allow globally configuring ANSI color emission via newly added enable! and disable! functions in matcher-combinators.ansi-color - Export clj-kondo config to silence unresolved-symbol warnings on match? and thrown-match?#2023-01-3116:47IratiNew release: #hop now deploys on-premises too: https://www.gethop.dev/post/hop-on-premises On the previous version of HOP CLI, users could only choose AWS as the deployment target. Now, when you open the settings editor using the latest version of HOP CLI, you will also have the option to choose On-premises.#2023-02-0106:12seancorfieldcom.github.seancorfield/expectations {:mvn/version "2.0.165"} -- https://github.com/clojure-expectations/clojure-test -- A clojure.test-compatible version of the classic Expectations testing library. -- this is the first update in about a year, very minor, but the more-> hook should help folks who use clj-kondo: • Fix https://github.com/clojure-expectations/clojure-test/issues/30 by removing build-clj and using raw tools.build. • Address https://github.com/clojure-expectations/clojure-test/issues/29 by providing a "hook" for more-> (but more work is needed). • Address https://github.com/clojure-expectations/clojure-test/issues/27 by changing refer'd note in stub macros' docstrings. Follow-up in #C2L9MU2RY#2023-02-0117:59ilevdClojureHaxe - experimental Clojure port written in Haxe targeting multiple platforms. Work in progress. https://github.com/ClojureHaxe/ClojureHaxe#2023-02-0118:59Dustin Getzi am super excited about this, can you tell us more about your vision?#2023-02-0120:18ilevdWell, first of all it's just an experimental project and I don't want to promise to much. And at point it is, there are many questions answers on which I simply don't know. I started it 2 months ago without previous experience with Haxe. Fortunately, it's very similar to Java and thus porting clojure.lang.* Java classes is pretty straightforward. I don't know by myself where it will lead to, and probably all possibilities will be discovered later and, I hope, not only by me :) My vision is in the "Near future goals" section of the project - first of all making Clojure interpeter, that can be run on several platforms, at least by first evaluating clojure.core. Then trying to transpile clojure.core to Haxe. Later work may include implementing concurrency and parallelizm, diving in target-specific features and interop etc. But again, first of all I would like to concentrate on general Haxe codebase which can be usefull on many platofrms, rather than to dive in how to dynamically create classes on individual platform. If someone later decide to concentrate on concrete platform, e.g Python, Lua..., and to push to this repo or make fork, then nice, let it be :) As for me I would prefer to concentrate at something related to gamedev later, Hashlink/C++, game engines e.t.c. But again, I don't want to promise to much at this point :)#2023-02-0120:33BenjaminCool! I've gotta say, I'm really looking forward to there being more and more emphasis on pure Clojure / cross-clojure libraries.#2023-02-0120:25nenadalmBackgammon - 2 player game (no ai, pwa, re-frame) on 1 device (link to the rules is in the menu) • app: https://nenadalm.github.io/backgammon/ • repo: https://github.com/nenadalm/backgammon#2023-02-0200:46jjttjjThis seems awesome, I love backgammon and never thought of trying to implement it. The only problem is, I cannot for the life of me figure out how to play. I know the rules but what are the key commands/controls?#2023-02-0208:16nenadalmyeah, I am not much of an UX person 🙂. Feedback/suggestions are welcomed. I wrote it mainly for phone, if I am somewhere with 1 more person to have something to play. Rules mention that you throw dice on right side of the board. So from your point of view if you see 2 dice on the right side, it's your turn, if on the left side, it's the opponents turn (dice are also upside down for you). You can also see available moves on the side of the board. So if you roll 5-4, you see available moves: 5, 4 and then if you move by 5, you see available moves: 4 The way you move is that you click on the point with checkers you want to move, the point will have green border (I was told this is not much visible, so I guess I'll have to figure out something else - like giving border to one checker or something) and then you click on the point you want to move to. The checker should move and you may continue with your 2nd move. if it happens that you cannot use any of the rolls, the app won't even show you what you rolled (this seems to confuse people, so I might change it) and it's the opponents turn again.#2023-02-0208:16nenadalmis that understandable?#2023-02-0214:15jjttjjAh I got it now, thanks! I was not seeing the border when clicking on the checker you want to move last night and was getting stuck on the "select a valid move" step#2023-02-0214:17jjttjjI think just beefing up the boarder width on the selected point, and possibly adding one to the valid destinations would do wonders#2023-02-0218:06nenadalmSelected point is hopefully more visible now. In order to update, you just need to open the app twice (first time it loads old version from the cache and fetches new version, next time new version will be opened). Not sure about highlighting the possible movements though. For now I'd like to try having it similar to the physical board game. Maybe I'll add some option some day which will do that.#2023-02-0218:34jjttjjOh that's better thanks#2023-02-0120:53dvlimanI put together a https://chrome.google.com/webstore/detail/cnn-chrome-extension/lbfjecjnndgobkgagllainiphdbhhalg?hl=en&amp;authuser=0written in Clojurescript, shadow-cljs: https://github.com/dvliman/cnn-chrome-extension#2023-02-0208:44renewdoithttps://github.com/robertluo/fun-map released version 0.5.114, the first version of the 0.5 milestones. Fun-map can be used in place of any plain map by support methods of a standard map. If you store specific particular values, computations could happen when you access it. Thus it can be used as a lazy map or manage dependencies and as a lifecycle management system like components or integrants without forcing you to compromise your basic design. This version is starting to support ClojureScript.#2023-02-0219:25mpenetlatest https://github.com/mpenet/mina/ (helidon-nima+loom) is out, now based on helidon alpha4 -> https://github.com/mpenet/mina/
#2023-02-0222:58lispycloudsAfter seeing a fair amount of production use, with pretty much no core changes and effectively being the goto lib for docker and podman, here is the 1.0.0 release of https://github.com/lispyclouds/contajners! An idiomatic, data-driven, REPL friendly clojure client for OCI container engines. Has all the latest support for docker and podman versions and compatible with clojure and #babashka 😄#2023-02-0302:25practicalli-johnhttps://github.com/practicalli/clojure-deps-edn - 2023 new year spring clean Simplified many of the alias definitions that add a wide range of community tools when using Clojure CLI and deps.edn projects • added :repl/reloaded to run Rebel rich terminal UI with a range of common libraries that support the REPL workflow • added :dev/reloaded as above but without Rebel - to be used with other :repl/ aliases • added :project/create to use seancorfield/deps-new project (`:project/new` remains for seancorfield/clj-new) • deprecated :project/jar and :project/uberjar which used the archived depstar project in favour of using a tools.build based approach, e.g. as in https://practical.li/clojure/clojure-cli/projects/tools-build/ section • deprecated many other aliases that are rarely needed, moving them into a deps-deprecated.edn file for posterity or curiosity - please let me know if any aliases in there are actively used The Clojure CLI aliases used in the Practicalli Clojure book are also being updated to use the simplified set, along with a significant rewrite and upgrade to a very snazzy looking Material theme (with light and dark options)#2023-02-0410:02borkdudehttps://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting New releases in the past month: 1.0.170 - 1.1.173 Highlights: • Support for data_readers.clj(c) • Include https://github.com/babashka/http-client as built-in library • Compatibility with clojure.tools.namespace.repl/refresh • Compatibility with clojure.java.classpath (and other libraries which rely on java.class.path and RT/baseLoader) • Compatibility with https://github.com/weavejester/eftest test runner (see https://twitter.com/borkdude/status/1616886788898885632) • Compatibility with https://github.com/weavejester/cljfmt • Support for *loaded-libs* and (loaded-libs) • Support add-watch on vars (which adds compatibility with potemkin.namespaces) • BREAKING: make printing of script results explicit with --prn Check the https://github.com/babashka/babashka/blob/master/CHANGELOG.md for all the changes! babashka#2023-02-0611:58ericdalloHappy monday Clojurians! Announcing https://github.com/ericdallo/jet.el: Parse edn/json/transit/yaml directly from Emacs using a magit-like interface emacs Besides the main entrypoint, the package has lots of commands to parse edn and: • copy to clipboard • to a new buffer • print to messages • just paste at cursor Available at MELPA!#2023-02-0612:02borkdudePR welcome to jet to mention this tool :)#2023-02-0612:02ericdalloThanks, I'm working on that exactly now :p#2023-02-0612:06ericdallohttps://github.com/borkdude/jet/pull/125#2023-02-0612:09Christian JohansenAmazing stuff 👏#2023-02-0612:10Christian JohansenCan I somehow make keybindings for common pairs of options?#2023-02-0612:10Christian JohansenEg, make an interactive command that sets input to JSON, output to EDN, and copies to the clipboard#2023-02-0612:11Christian JohansenThis is possibly feedback to jet more than this glue, but it would be cool if jet was able to guess the input automatically - seems like it should be possible?#2023-02-0612:11ericdalloit's possible indeed, I'll add a example in the readme#2023-02-0612:11Christian Johansen👍#2023-02-0612:11ericdalloguess the input is a little bit harder I guess#2023-02-0612:12borkdudeI guess all json is valid transit, so how would you guess the difference?#2023-02-0612:12Christian Johansentry parsing it as transit first?#2023-02-0612:14Christian JohansenSorry, I misunderstood#2023-02-0612:15Christian JohansenIf transit can read both transit-specific JSON and just regular JSON, then there is no big problem? Default behavior with no -i could be to try to parse as edn, then as transit, then as yml.#2023-02-0612:16borkdudeI guess you could do this in emacs first and then see how it works out#2023-02-0612:29olynice I use jet extensively for formatting in emacs and converting between json and edn, I will go install, @U04V15CAJ curious if it would be possible to add in other map types like say python dict's as a quick way to convert, between languages I guess custom parsers would be needed ?#2023-02-0612:29borkdude@UU67HFS2X What does that look like?#2023-02-0612:30ericdallopretty similar to javascript maps: {'foo': 'bar'} IIRC#2023-02-0612:31borkdudein that case converting from JSON should already work?#2023-02-0612:34borkdudeexcept that JSON doesn't support single quotes I guess#2023-02-0612:47Christian Johansen
(defun jet-to-clipboard (thing &optional args)
  "Run jet for THING at cursor and ARGS copying to clipboard."
  ,,,)
It’s been a while since I wrote elisp… What’s thing @UKFSJSM38?
#2023-02-0612:47olyGot me wondering now, sure I would have tried the json version, need to go find a python map now and try that#2023-02-0613:01olyI think where the python map fails is on the values, so you can have functions for example, the json parser does not like those, there maybe other data values but I imagine most are compatible#2023-02-0613:11ericdalloUsually (jet--thing-at-point) @U9MKYDN4Q, the region selected or current form at point#2023-02-0613:12Christian JohansenYeah, just found it 😅 Thanks 🙏#2023-02-0613:23ericdallo@U9MKYDN4Q I improved the readme mentioning how to customize the functions so you can keybind#2023-02-0613:23Christian JohansenCool, thanks#2023-02-0613:24Christian JohansenI ended up with these:
(require 'jet)

(defun copy-edn-as-json ()
  (interactive)
  (jet-to-clipboard
   (jet--thing-at-point)
   '("--from=edn" "--to=json"))
  (keyboard-quit))

(defun copy-json-as-edn ()
  (interactive)
  (jet-to-clipboard
   (jet--thing-at-point)
   '("--from=json" "--to=edn" "--keywordize"))
  (keyboard-quit))

(global-set-key (kbd "C-c j e j") 'copy-edn-as-json)
(global-set-key (kbd "C-c j j e") 'copy-json-as-edn)
#2023-02-0613:24Christian JohansenNew Readme will save the next person some time 😄#2023-02-0613:24Christian JohansenAnyway, amazing stuff, thanks for your effort 👏#2023-02-0613:25ericdalloAdded your example to the readme how to keybind, thank you! gratitude#2023-02-0614:23robert-stuttafordthis is honestly so damn useful @UKFSJSM38 thank you (and thanks again to borkers!)#2023-02-0614:37zalkyNew: Simple https://en.wikipedia.org/wiki/DBSCAN clustering: • Pure Clojure/Clojurescript implementation Hope it is helpful! :rightwards_hand: 🎁 And more to come :face_with_open_eyes_and_hand_over_mouth: https://github.com/zalky/dbscan-clj#2023-02-0617:44vemvnice! what lead you to write it? 🙂#2023-02-0617:47zalkyThanks! I'm releasing a library in the next couple of days for building Re-frame/React apps that includes a visual debugger that overlays graphical elements onto the live application. I needed a simple clustering algorithm for collecting and grouping certain visual elements on the screen.#2023-02-0617:49Carsten BehringWould you consider to "bind" your library closer to the upcoming Clojure data science stack by using a "tech.ml.dataset" (a column oriented table) as input data, instead of vector-of-maps TMD is living here: https://github.com/techascent/tech.ml.dataset If this is the case, you could as well considre to integrate the DBSCAN algorithm in one of the existing" collections of algorithms working on the same data format.#2023-02-0617:52zalkySure, I actually use tech.ml.dataset quite regularly, it's fantastic. But never thought to connect the two! I'd have to think about what that would entail, are there examples in the code-base of other grouping or clustering bindings I could look at as a pattern to follow?#2023-02-0618:08Carsten BehringIt should be very easy . The "core" of your algorithm could even stay as is. You would just convert from dataset to vector-of-maps, run your stuff and convert back to a tech.ml.dataset This might come with small performance penalty (versus rebuilding the algorithm using the TMD primitives), but probably negligible. So you just need a functions like yours : https://github.com/zalky/dbscan-clj/blob/bb7aa0fae89cd9c8477278b0aae70e443517284c/src/dbscan_clj/core.cljc#L88 but it takes a "tech.ml.dataset" as input. (and reurn such dataset as well), so things can be chained easely. Probably you need some options to define on "which columns" your clustering is performed.#2023-02-0618:13Carsten BehringThis new code would be a kind of "adapter" to TMD. So where "physically" place your original code and teh adapter is a question to answer. Doing the adapter will require a dependency to tech.ml.dataset , so maybe you code in https://github.com/zalky/dbscan-clj wants to avoid that.#2023-02-0618:19Carsten BehringI would maybe even suggest to have the "adapter" standalone, depending on
io.zalky/dbscan-clj {:mvn/version "0.1.0"}
and
techascent/tech.ml.dataset {:mvn/version "7.000-beta-27"}
and it just does the data conversion and calls dbscan and converts back. A few lines of code in my view.
#2023-02-0618:20Carsten Behring(one reason being ClojureScript compatibility). TMD is a Clojure library, not compatible with ClojureScript#2023-02-0618:28zalkyYes, I agree with these points. I'll take a bit of a closer look to see what alternatives there are for integrating with tech.ml.dataset's abstractions. There might be some protocols or interfaces that are easy to implement. Thanks for planting the seed, I don't think I would have made the connection otherwise.#2023-02-0617:25hlshipcom.walmartlabs/lacinia 1.2 Lacinia is an open-source implementation of the GraphQL specification, in Clojure. GraphQL is an outstanding approach to getting diverse clients and servers exchanging data cleanly and efficiently. GitHub repo: https://github.com/walmartlabs/lacinia Documentation: https://lacinia.readthedocs.io/en/latest/ Lacinia 1.2 fills in some gaps in Lacinia's functionality. Notable changes: • Direct control over the Executor used for callbacks • Subscription streamer functions are now on-par with ordinary field resolver functions by supporting directives and supporting access to the preview API • The entire https://lacinia.readthedocs.io/en/latest/tutorial has been rewritten to be more clear, and use modern standards (such as tools.deps for the build, and using Pascal Case field names). https://github.com/walmartlabs/lacinia/issues?q=is%3Aclosed+milestone%3A1.2#2023-02-0622:53Sam RitchieAnnouncing v0.3.0 of clerk-utils , a library designed to help write interactive docs like https://clerk-utils.mentat.org with #clerk. This release adds mentat.clerk-utils.build/{build!,serve!,halt!} functions for building custom ClojureScript bundles for #clerk. This lets you use ~any JS or CLJS library when writing custom viewers in Clerk. See the interactive docs notebook section on Custom ClojureScript for more detail: https://clerk-utils.mentat.org/#custom-clojurescript-builds 0.3.0 also adds a clerk-utils/custom #deps-new template (https://github.com/mentat-collective/clerk-utils/tree/main/resources/clerk_utils/custom) for generating a Clerk project with all of the custom ClojureScript stuff baked in. (Here’s https://github.com/mentat-collective/clerk-utils-custom-template.) • Release notes: https://github.com/mentat-collective/clerk-utils/releases/tag/v0.3.0 • Clojars: https://clojars.org/org.mentat/clerk-utils • Github: https://github.com/mentat-collective/clerk-utils #2023-02-0622:59quollhttps://github.com/quoll/donatello v0.0.1 A simple Turtle writer. This library converts basic Clojure structures into formatted turtle files. It accepts nested maps, such as used by Asami, or identifiers paired with simple maps. For simplicity, keywords are treated as QNames/CURIEs, and will be written out this way.#2023-02-0700:02Cora (she/her)what's a Turtle in this context?#2023-02-0701:14quollhttps://www.w3.org/TR/turtle/#2023-02-0701:16Cora (she/her)ahhh ok #2023-02-0701:17Cora (she/her)I really don't know much about RDF#2023-02-0701:17Cora (she/her)thanks 😊 #2023-02-0701:17Cora (she/her)maybe I should read about it#2023-02-0701:17quollIt’s been my career for over 20 years, so… 😄#2023-02-0701:18Cora (she/her)so ask you instead?? 😜 #2023-02-0701:18quollI’m more than happy to help. But if you want something to read, you can start https://www.w3.org/TR/rdf11-primer/#2023-02-0712:54Eugencool name 🙂#2023-02-0713:26quollWell, the partner library (for parsing Turtle files) is called https://github.com/quoll/raphael #2023-02-0713:36Eugenmakes sense 🙂#2023-02-0714:06zalkyNew: https://github.com/zalky/reflet is a set of tools for building https://github.com/day8/re-frame + React based web apps with graph and non-graph data models. This includes: 1. Entity references and their lifecycle management 2. Performant multi-model db with graph queries and mutations 3. Simple but powerful hierarchical FSMs 4. JS and DOM interop utilities 5. Novel API-driven visual debugging of complex apps (don't sleep on this! see the short vid below) Reflet aims to be a natural progression on top of Re-frame, sort of like Re-frame++ (or Fulcro for Re-frame). Its main design goals are: 1. A la carte feature set: it is not a "framework", so use as much or as little of it as you want 2. Works with existing Re-frame applications: iterative, minimal approach to integration, so big re-writes can be avoided 3. Graph and non-graph data models can be mixed freely with a single source of truth: a Clojure map 4. A single macro encourages excellent, pluggable APIs 5. Highly performant and stable: Reflet has already been deployed in complex data-driven production apps for years (e.g. in Bioinformatics, Business analytics... ) Hope it is helpful! :rightwards_hand: 🎁 And more to come :face_with_open_eyes_and_hand_over_mouth: https://github.com/zalky/reflet#2023-02-0714:53robert-stuttafordimpressive work, nice one!#2023-02-0715:06zalkyThanks!#2023-02-0715:44pezThis looks yummy! CC: @UGDTSFM4M#2023-02-0715:58DrLjótssonIndeed!#2023-02-0718:18hlshipThis may be just what I need for a side project I've been thinking about for years.#2023-02-0718:49respatializedwow, that visual debugger is very impressive! like a Smalltalk object viewer but for dataflow. #2023-02-0718:49zalkyAwesome, hope it turns out to be helpful!#2023-02-0718:52zalkyThanks: the debugger itself is kind of an example of what the library is capable of: it was written entirely in Reflet to avoid having to inline any big JS dependencies.#2023-02-0719:12respatializedThat also sounds very aligned with the Smalltalk spirit!#2023-02-0806:24robert-stuttafordthe debug windows thing is super inspiring @U0HJK8682!#2023-02-0717:27borkdudehttps://github.com/babashka/sci: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs SCI is used in https://github.com/babashka/babashka, https://github.com/babashka/nbb, https://github.com/nextjournal/clerk, https://github.com/BetterThanTomorrow/joyride/ and many https://github.com/babashka/sci#projects-using-sci projects. It is now easier to add JS libraries to your SCI ctx, so users can require and use them:
(ns sci.examples.js-libs
  (:require ["fs" :as fs]
            [sci.core :as sci]))

(sci/eval-string "
(require '[\"fs\" :as fs])
(fs/existsSync \"README.md\")"
                 {:js-libs {"fs" fs}})
;;=> true
This and several other improvements in v0.7.38 (2023-02-07) • Add sci/add-js-lib! for adding js libraries including corresponding :js-libs init option • Speed up Java interop around 5x by caching method lookups • Allow destructucturing in CLJS defmethodhttps://github.com/babashka/sci/issues/862: fix JS constructor from class in CLJS namespace • Improve error location in macroexpansion • https://github.com/babashka/sci/issues/867: Support add-watch and remove-watch on sci.lang.Varhttps://github.com/babashka/sci/issues/648: implement *loaded-libs* and (loaded-libs) • Expose new parse-next+string function • Support qualified method names in proxy while ignoring the namespace • Support read with non-indexing reader, fixes https://github.com/babashka/babashka/issues/1465 • Improve top level macro expansion error location • Fix pprinting vars • Add reader-conditional to core vars • Fix https://github.com/babashka/babashka/issues/1482: make loading of libs thread safe
#2023-02-0718:22Matthew DowneyAnnouncing v1.0.1 of https://github.com/matthewdowney/rich-comment-tests (clojure, babashka), with one bugfix for a specific mechanism of running all tests from babashka, plus a README section on https://github.com/matthewdowney/rich-comment-tests#use-with-babashka-tasks.#2023-02-0912:24borkdude@UP7RM6935 I'm working on a fix in rewrite-clj but with that fix in place, the only tests that are failing are for rct. https://github.com/clj-commons/rewrite-clj/pull/215 I'm looking into why this is happening but I have difficulty grokking the failing tests. Is this something you could help with?#2023-02-0915:40Matthew DowneyI must be abusing the rewrite-clj API somewhere, let me check#2023-02-0915:46Matthew Downey@U04V15CAJ Nothing coming to mind immediately from looking at the failing tests, so I'll use your PR branch to try some stuff locally. I don't think it has to do with the 1.0.0 -> 1.0.1 bugfix. I won't be at the computer until the evening though. Sorry to be the one library holding this up!#2023-02-0915:47borkdudeNo worries :) Your library might be testing something valuable that I accidentally broke :)#2023-02-0915:47borkdude(cc @UE21H2HHD)#2023-02-0915:48Matthew DowneyBtw @UE21H2HHD the canary tests of known dependencies are a cool pattern, I hadn't seen that before#2023-02-0915:48borkdudeBabashka also tests a plethora of libraries in every commit#2023-02-0915:50borkdudehttps://github.com/babashka/babashka/blob/master/test-resources/lib_tests/bb-tested-libs.edn#2023-02-0915:51Matthew DowneyMakes a lot of sense!#2023-02-0915:52lreadGonna take a deep peek sometime very soon!#2023-02-0916:59lreadI'm missing a tiny bit of context here. Was there some existing test suite that helped you discover rewrite-clj has an issue? I'd like to rerun that (if there is one).#2023-02-0917:01borkdude@UE21H2HHD For full context: I discovered an issue with rewrite-clj through clj-kondo. The issue is that this crashes:
(rewrite-clj.node/sexpr (rewrite-clj.node/coerce "\\s+"))
I submitted two patches which solve this problem. One of them broke tests in rich-comment-tests. I closed that one now. The other one works.
#2023-02-0917:02borkdudeI don't think @UP7RM6935 has to look into this anymore, probably#2023-02-0917:03borkdudeI tested rich-comment-test by using local/root in deps.edn and then running:
bb test-clj
#2023-02-0917:06lreadAh ok. Thanks, did not understand where the discovery occurred.#2023-02-0917:13borkdudeHere: https://github.com/clj-kondo/clj-kondo/issues/1987#2023-02-0917:14borkdudeI realize I forgot to add that context in the original issue, sorry#2023-02-0917:14lreadNo problemo!#2023-02-0807:05kingmobhttps://clojars.org/org.clj-commons/dirigiste/versions/1.0.3 is now available. Many thanks to @arnaudgeiser for contributing. This includes a bunch of minor changes and bugfixes for Aleph users, including: • Fixed bug ensuring queues are properly removed • Fixed bug in awaitTermination return value • Fixed pool race condition • Added basic JMH benchmarks • Simplified locking strategy If you're impatient, update now, but if not, it will be available as part of Aleph in the next release or two.#2023-02-0810:14kingmobAnnouncing the release of https://clojars.org/aleph/versions/0.6.1. This version contains a variety of bug fixes and speed-ups. Also upgrades to the latest versions of Manifold, Dirigiste, and Netty. Big thanks to @arnaudgeiser, who tackled most of these changes!#2023-02-0821:41Sam RitchieAnnouncing v0.2.0 of Mafs.cljs ! This library provides a #C0620C0C8 interface to the https://mafs.dev 2d interactive mathematical visualization library, all backed by SVG. v0.2.0 adds better #C015LCR9MHD integration (https://mafs.mentat.org/#mafs.cljs-via-sci) and a #C019ZQSPYG6 template called mafs/clerk that creates a project fully configured for Mafs.cljs + #C035GRLJEP8 use, just like I do in the https://mafs.mentat.org. The templates https://github.com/mentat-collective/Mafs.cljs/tree/main/resources/mafs/clerk. • Clojars: https://clojars.org/org.mentat/mafs.cljs • Github: https://github.com/mentat-collective/mafs.cljs • Questions / discussion in #C041G9B1AAK #2023-02-0914:12eval2020New, overhauled release of https://github.com/eval/deps-try#deps-try, a tool to quickly try out Clojure dependencies on rebel-readline:
$ deps-try metosin/malli
Give it a spin: $ bbin install io.github.eval/deps-try Changes: • Install via https://github.com/babashka/bbin • Interrupting an operation does not kill the REPL-session • Support for git-urls and branch/tag, e.g. deps-try some-branch • Conveniently toggle some Clojure settings, e.g. clojure.core/*print-namespace-maps* • Central history-file (following XDG spec) • Resolves dependencies in isolation (as much as possible), i.e. ignoring deps.edn • Upgraded deps for (now vendored) rebel-readline
#2023-02-0918:42Noah Bogart
$ deps-try clj-kondo/clj-kondo
Syntax error compiling at (eval/deps_try/try.clj:106:28).
No such var: fs/xdg-data-home

Full report at:
/tmp/clojure-4707535182527186318.edn
#2023-02-0918:43Noah Bogartlooks like a cool app, i'm excited to try it out when i can get it working#2023-02-0920:41eval2020@UEENNMX0T could you try installing again? (should become v0.3.1)#2023-02-0921:42borkdude@U04V6FEES
$ deps-try
[Rebel readline] Type :repl/help for online help info
user=> :deps/try clj-kondo/clj-kondo
user=> (require '[clj-kondo.core :as clj-kondo])
Execution error (FileNotFoundException) at user/eval7264 (R
#2023-02-0922:39Eric ScottFairly significant upgrade to two libraries supporting RDF in Clojure • ont-app/igraph-jena ports the Jena RDF store to the ont-app/igraph protocols • ont-app/rdf provides a layer of logic for dealing with RDF-baed implemantaions of igraph generally https://github.com/ont-app/igraph-jena https://github.com/ont-app/rdf#2023-02-1000:54kennytiltonI ❤️ RDF.#2023-02-1000:56kennytiltonAnd I ❤️❤️ GDB even more.#2023-02-1001:58kennytiltonLooks pretty solid at a glance. Crazy question: is there any notification mechanism in the protocol? My reactive hack likes "push", if you will. Subscribe/notify, yadda yadda.#2023-02-1002:36Eric ScottNo there's nothing like that. This seems orthogonal to graphy behavior, or maybe I'm not clear on what you mean?#2023-02-1002:42Eric ScottWould add-watch do the trick? https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/add-watch#2023-02-1003:21kennytilton"add watch" would do the trick nicely. :thinking_face: Might be fun building a reactive layer around iGraph. Do you have a backend for any of Franz's DBs, such as AllegroCache and AllegroGraph? Reminds me, I once rolled my own GDB-lite atop Postgres.#2023-02-1004:35Eric ScottNo so far I've just done jena and grafter, which wraps rdf4j if IIRC (badly needs a refresher). I'm also trying to extend it to other graph architectures. So many graphs, so little time :-)#2023-02-1013:26kennytiltonTell me about it. I have UIs for the Web, CLJS and native JS, React, ReactNative, and now Flutter. We should start a self-help group. Anyway, next Q: are there other GDB protocols out there like iGraph? Any standards process ongoing?#2023-02-1013:36Eric ScottNot that I know of, though it seems that datalog (following datomic's example) is the most common way of querying graphs in clojure-native implementations.#2023-02-1013:39Eric Scottont-app has https://github.com/ont-app/datascript-graph and https://github.com/ont-app/datomic-client, both of which are overdue for some sprucing up.#2023-02-1013:43Eric ScottIf you like SPARQLing, this is an interesting clojure-y approach: https://github.com/yetanalytics/flint#2023-02-1014:31kennytiltonI think a low-level fact maintenance API will be the key, and I am sure you have that. My objective will be transparent persistence of reactive objects, basically just maps with individually reactive properties. I did this atop an early Franz RDF product, went well.#2023-02-1014:36Eric ScottDo you find the igraph protocol spec (and maybe ont-app/rdf) fairly approachable? If so, I'd welcome your extending it to your Allegrograph .#2023-02-1014:37Eric Scott... moneybags! :-)#2023-02-1014:49kennytiltonWell, I am old enough to remember when people were able to sell software, so a proprietary DB is fine. Maybe we can get them to pay for the work. 🙂 btw, my RDF hack also made triples themselves reactive, storing formula code for eval as needed. As long as the right software was reading/writing the DB, mind you. I did that as well with Franz's old AllegroStore, a persistent CLOS solution. Very powerful. I did not stare hard at the protocol, I could tell from a distance that it was solid. 🙂 What I would do is a proof-of-concept using the simplest, working implementation and then worry about scaling to other DBs and more features.#2023-02-1014:50Eric ScottGot a pointer to your 'hack'?#2023-02-1014:52Eric ScottYeah I remember Allegro CL fondly. Even paid for my own license for a while in the 00's. Actually it was a talk by Jans Aasman about AllegroGraph that got me interested in RDF#2023-02-1014:55Eric ScottThat was about the same time I found Clojure.#2023-02-1015:44kennytiltonHad to copy TripleCells in from another project. Good thing you know Lisp. 🙂 https://github.com/kennytilton/cells/tree/main/triple-cells Maybe start with hello-world.lisp where I test that the DB is self-updating.#2023-02-1018:11kennytiltonBtw, I had a fun moment using Gruff to inspect the TripleCells encoding of the hello-world.lisp example, including all the implementation triples used to record dependencies.#2023-02-1002:33Matthew DowneyJust released v1.0.2 of https://github.com/matthewdowney/rich-comment-tests/ which is compatible with Babashka >=1.1.171 (now rct's JVM and bb code is identical)[1]. Thanks for the heads up @borkdude! [1] https://github.com/matthewdowney/rich-comment-tests/issues/18#2023-02-1014:42vlaaadA new version of reveal https://vlaaad.github.io/reveal/ is out (Free: 1.3.280, Pro: 1.3.359)! It introduces highlighting of illegal booleans. If you wonder, what the hell is illegal boolean and why they are a problem, you can read the https://vlaaad.github.io/illegal-booleans. In short, it's a boolean that's neither Boolean/TRUE nor Boolean/FALSE , and it messes with Clojure's equality semantics implementation. Discuss here or in #CUDTFQ152#2023-02-1019:57oliyI remember running into this problem when data was being sent over the wire through hazelcast. Couldn't believe my eyes when I saw a false being evaluated as true!#2023-02-1015:35stathissiderisbb-dialog gets support for treeview in v0.3! #babashka https://github.com/pixelated-noise/bb-dialog#2023-02-1121:55seancorfieldHoneySQL -- Turn Clojure data structures into SQL -- com.github.seancorfield/honeysql {:mvn/version "2.4.979"} -- https://github.com/seancorfield/honeysql -- this is the third release since the last announcement here: • Address https://github.com/seancorfield/honeysql/issues/459 by making all operators variadic (except := and :<>). • Address https://github.com/seancorfield/honeysql/issues/458 by adding registered-*? predicates. • (2.4.972) Address https://github.com/seancorfield/honeysql/issues/456 by allowing format to handle expressions (like 1.x could) as well as statements. This should aid with migration from 1.x to 2.x. • (2.4.969) Fix https://github.com/seancorfield/honeysql/issues/454 by allowing - to be variadic. • (2.4.969) Address https://github.com/seancorfield/honeysql/pull/452 by adding :replace-into to the core SQL supported, instead of just for the MySQL and SQLite dialects (so the latter is not needed yet). • (2.4.969) Address https://github.com/seancorfield/honeysql/issues/451 by adding a test for it, showing how :nest produces the desired result. • (2.4.969) Address https://github.com/seancorfield/honeysql/issues/447 by updating GitHub Actions and dependencies. • (2.4.969) Address https://github.com/seancorfield/honeysql/issues/445 and https://github.com/seancorfield/honeysql/issues/453 by adding key/constraint examples to CREATE TABLE docs. Follow-up in #honeysql#2023-02-1215:33pez#joyride brings Emacs-like hackability to VS Code. (Slightly weaker reach into the editor, much lovelier scripting language.) In https://github.com/BetterThanTomorrow/joyride/releases/tag/v0.0.33 you get rewrite-clj support! joyridehttps://github.com/BetterThanTomorrow/joyride/issues/150#2023-02-1216:07Quentin Le Guennecvery cool thanks!#2023-02-1216:29Alex Miller (Clojure team)https://github.com/clojure/tools.gitlibs 2.5.190 • Fix problem with blocking on big git output (particularly an issue for tag verification on git repos with large number of tags)#2023-02-1216:30Alex Miller (Clojure team)https://github.com/clojure/tools.deps 0.16.1281 • Update to tools.gitlibs 2.5.190 • TDEPS-235 Disallow http :mvn-repos#2023-02-1216:38Alex Miller (Clojure team)Clojure CLI https://clojure.org/releases/tools#v1.11.1.1224 • Fix issue with git tag verification for repos with a large number of tags • https://clojure.atlassian.net/browse/TDEPS-235 - Disallow http :mvn/repos • https://clojure.atlassian.net/browse/TDEPS-236 - Add rlwrap -m to clj for multiline editing #2023-02-1223:50Matthew Downeyhttps://github.com/matthewdowney/excel-clj v2.2.0 — upgraded dependencies and added a new helper to allow writing clojure.pprint/print-table to Excel sheets instead of stdout.